Merge "update GLES headers and add support for corresponding new extensions."
diff --git a/Android.mk b/Android.mk
index 42cb097..ace7b7c 100644
--- a/Android.mk
+++ b/Android.mk
@@ -94,6 +94,7 @@
core/java/android/bluetooth/IBluetoothHealthCallback.aidl \
core/java/android/bluetooth/IBluetoothPbap.aidl \
core/java/android/bluetooth/IBluetoothStateChangeCallback.aidl \
+ core/java/android/content/ICancelationSignal.aidl \
core/java/android/content/IClipboard.aidl \
core/java/android/content/IContentService.aidl \
core/java/android/content/IIntentReceiver.aidl \
diff --git a/api/current.txt b/api/current.txt
index 4a8cd3c..0b2ecea 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -4659,7 +4659,9 @@
public abstract class AsyncTaskLoader extends android.content.Loader {
ctor public AsyncTaskLoader(android.content.Context);
method public boolean cancelLoad();
+ method protected boolean isLoadInBackgroundCanceled();
method public abstract D loadInBackground();
+ method protected void onCancelLoadInBackground();
method public void onCanceled(D);
method protected D onLoadInBackground();
method public void setUpdateThrottle(long);
@@ -4701,6 +4703,18 @@
method public final void setResultExtras(android.os.Bundle);
}
+ public final class CancelationSignal {
+ ctor public CancelationSignal();
+ method public void cancel();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(android.content.CancelationSignal.OnCancelListener);
+ method public void throwIfCanceled();
+ }
+
+ public static abstract interface CancelationSignal.OnCancelListener {
+ method public abstract void onCancel();
+ }
+
public class ClipData implements android.os.Parcelable {
ctor public ClipData(java.lang.CharSequence, java.lang.String[], android.content.ClipData.Item);
ctor public ClipData(android.content.ClipDescription, android.content.ClipData.Item);
@@ -4820,6 +4834,7 @@
method public android.os.ParcelFileDescriptor openPipeHelper(android.net.Uri, java.lang.String, android.os.Bundle, T, android.content.ContentProvider.PipeDataWriter<T>) throws java.io.FileNotFoundException;
method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException;
method public abstract android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.content.CancelationSignal);
method protected final void setPathPermissions(android.content.pm.PathPermission[]);
method protected final void setReadPermission(java.lang.String);
method protected final void setWritePermission(java.lang.String);
@@ -4843,6 +4858,7 @@
method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException, android.os.RemoteException;
method public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException, android.os.RemoteException;
method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String) throws android.os.RemoteException;
+ method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.content.CancelationSignal) throws android.os.RemoteException;
method public boolean release();
method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]) throws android.os.RemoteException;
}
@@ -4929,6 +4945,7 @@
method public final java.io.OutputStream openOutputStream(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
method public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException;
method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.content.CancelationSignal);
method public final void registerContentObserver(android.net.Uri, boolean, android.database.ContentObserver);
method public static void removePeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle);
method public static void removeStatusChangeListener(java.lang.Object);
@@ -5781,6 +5798,11 @@
method public int getNumSuccessfulYieldPoints();
}
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(java.lang.String);
+ }
+
public class PeriodicSync implements android.os.Parcelable {
ctor public PeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle, long);
method public int describeContents();
@@ -7225,11 +7247,15 @@
method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory);
method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler);
method public android.database.Cursor query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String);
+ method public android.database.Cursor query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.content.CancelationSignal);
method public android.database.Cursor query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String);
method public android.database.Cursor query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String);
method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String);
+ method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.content.CancelationSignal);
method public android.database.Cursor rawQuery(java.lang.String, java.lang.String[]);
+ method public android.database.Cursor rawQuery(java.lang.String, java.lang.String[], android.content.CancelationSignal);
method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, java.lang.String, java.lang.String[], java.lang.String);
+ method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, java.lang.String, java.lang.String[], java.lang.String, android.content.CancelationSignal);
method public static int releaseMemory();
method public long replace(java.lang.String, java.lang.String, android.content.ContentValues);
method public long replaceOrThrow(java.lang.String, java.lang.String, android.content.ContentValues) throws android.database.SQLException;
@@ -7351,6 +7377,7 @@
method public java.lang.String getTables();
method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String);
method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String);
+ method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.content.CancelationSignal);
method public void setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory);
method public void setDistinct(boolean);
method public void setProjectionMap(java.util.Map<java.lang.String, java.lang.String>);
@@ -12621,6 +12648,7 @@
ctor public NdefMessage(android.nfc.NdefRecord, android.nfc.NdefRecord...);
ctor public NdefMessage(android.nfc.NdefRecord[]);
method public int describeContents();
+ method public int getByteArrayLength();
method public android.nfc.NdefRecord[] getRecords();
method public byte[] toByteArray();
method public void writeToParcel(android.os.Parcel, int);
diff --git a/cmds/servicemanager/Android.mk b/cmds/servicemanager/Android.mk
index ea80c7d..8840867 100644
--- a/cmds/servicemanager/Android.mk
+++ b/cmds/servicemanager/Android.mk
@@ -9,7 +9,4 @@
LOCAL_SHARED_LIBRARIES := liblog
LOCAL_SRC_FILES := service_manager.c binder.c
LOCAL_MODULE := servicemanager
-ifeq ($(BOARD_USE_LVMX),true)
- LOCAL_CFLAGS += -DLVMX
-endif
include $(BUILD_EXECUTABLE)
diff --git a/cmds/servicemanager/service_manager.c b/cmds/servicemanager/service_manager.c
index 42d8977..4ed2489 100644
--- a/cmds/servicemanager/service_manager.c
+++ b/cmds/servicemanager/service_manager.c
@@ -27,9 +27,6 @@
unsigned uid;
const char *name;
} allowed[] = {
-#ifdef LVMX
- { AID_MEDIA, "com.lifevibes.mx.ipc" },
-#endif
{ AID_MEDIA, "media.audio_flinger" },
{ AID_MEDIA, "media.player" },
{ AID_MEDIA, "media.camera" },
diff --git a/core/java/android/content/AsyncTaskLoader.java b/core/java/android/content/AsyncTaskLoader.java
index 0b54396..944ca6b 100644
--- a/core/java/android/content/AsyncTaskLoader.java
+++ b/core/java/android/content/AsyncTaskLoader.java
@@ -173,6 +173,7 @@
if (DEBUG) Slog.v(TAG, "cancelLoad: cancelled=" + cancelled);
if (cancelled) {
mCancellingTask = mTask;
+ onCancelLoadInBackground();
}
mTask = null;
return cancelled;
@@ -256,6 +257,25 @@
}
/**
+ * Override this method to try to abort the computation currently taking
+ * place on a background thread.
+ *
+ * Note that when this method is called, it is possible that {@link #loadInBackground}
+ * has not started yet or has already completed.
+ */
+ protected void onCancelLoadInBackground() {
+ }
+
+ /**
+ * Returns true if the current execution of {@link #loadInBackground()} is being canceled.
+ *
+ * @return True if the current execution of {@link #loadInBackground()} is being canceled.
+ */
+ protected boolean isLoadInBackgroundCanceled() {
+ return mCancellingTask != null;
+ }
+
+ /**
* Locks the current thread until the loader completes the current load
* operation. Returns immediately if there is no load operation running.
* Should not be called from the UI thread: calling it from the UI
diff --git a/core/java/android/content/CancelationSignal.java b/core/java/android/content/CancelationSignal.java
new file mode 100644
index 0000000..58cf59d
--- /dev/null
+++ b/core/java/android/content/CancelationSignal.java
@@ -0,0 +1,164 @@
+/*
+ * 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.content;
+
+import android.os.RemoteException;
+
+/**
+ * Provides the ability to cancel an operation in progress.
+ */
+public final class CancelationSignal {
+ private boolean mIsCanceled;
+ private OnCancelListener mOnCancelListener;
+ private ICancelationSignal mRemote;
+
+ /**
+ * Creates a cancelation signal, initially not canceled.
+ */
+ public CancelationSignal() {
+ }
+
+ /**
+ * Returns true if the operation has been canceled.
+ *
+ * @return True if the operation has been canceled.
+ */
+ public boolean isCanceled() {
+ synchronized (this) {
+ return mIsCanceled;
+ }
+ }
+
+ /**
+ * Throws {@link OperationCanceledException} if the operation has been canceled.
+ *
+ * @throws OperationCanceledException if the operation has been canceled.
+ */
+ public void throwIfCanceled() {
+ if (isCanceled()) {
+ throw new OperationCanceledException();
+ }
+ }
+
+ /**
+ * Cancels the operation and signals the cancelation listener.
+ * If the operation has not yet started, then it will be canceled as soon as it does.
+ */
+ public void cancel() {
+ synchronized (this) {
+ if (!mIsCanceled) {
+ mIsCanceled = true;
+ if (mOnCancelListener != null) {
+ mOnCancelListener.onCancel();
+ }
+ if (mRemote != null) {
+ try {
+ mRemote.cancel();
+ } catch (RemoteException ex) {
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Sets the cancelation listener to be called when canceled.
+ * If {@link CancelationSignal#cancel} has already been called, then the provided
+ * listener is invoked immediately.
+ *
+ * The listener is called while holding the cancelation signal's lock which is
+ * also held while registering or unregistering the listener. Because of the lock,
+ * it is not possible for the listener to run after it has been unregistered.
+ * This design choice makes it easier for clients of {@link CancelationSignal} to
+ * prevent race conditions related to listener registration and unregistration.
+ *
+ * @param listener The cancelation listener, or null to remove the current listener.
+ */
+ public void setOnCancelListener(OnCancelListener listener) {
+ synchronized (this) {
+ mOnCancelListener = listener;
+ if (mIsCanceled && listener != null) {
+ listener.onCancel();
+ }
+ }
+ }
+
+ /**
+ * Sets the remote transport.
+ *
+ * @param remote The remote transport, or null to remove.
+ *
+ * @hide
+ */
+ public void setRemote(ICancelationSignal remote) {
+ synchronized (this) {
+ mRemote = remote;
+ if (mIsCanceled && remote != null) {
+ try {
+ remote.cancel();
+ } catch (RemoteException ex) {
+ }
+ }
+ }
+ }
+
+ /**
+ * Creates a transport that can be returned back to the caller of
+ * a Binder function and subsequently used to dispatch a cancelation signal.
+ *
+ * @return The new cancelation signal transport.
+ *
+ * @hide
+ */
+ public static ICancelationSignal createTransport() {
+ return new Transport();
+ }
+
+ /**
+ * Given a locally created transport, returns its associated cancelation signal.
+ *
+ * @param transport The locally created transport, or null if none.
+ * @return The associated cancelation signal, or null if none.
+ *
+ * @hide
+ */
+ public static CancelationSignal fromTransport(ICancelationSignal transport) {
+ if (transport instanceof Transport) {
+ return ((Transport)transport).mCancelationSignal;
+ }
+ return null;
+ }
+
+ /**
+ * Listens for cancelation.
+ */
+ public interface OnCancelListener {
+ /**
+ * Called when {@link CancelationSignal#cancel} is invoked.
+ */
+ void onCancel();
+ }
+
+ private static final class Transport extends ICancelationSignal.Stub {
+ final CancelationSignal mCancelationSignal = new CancelationSignal();
+
+ @Override
+ public void cancel() throws RemoteException {
+ mCancelationSignal.cancel();
+ }
+ }
+}
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 116ca48..adbeb6a 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -29,6 +29,7 @@
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.os.Process;
+import android.os.RemoteException;
import android.util.Log;
import java.io.File;
@@ -174,28 +175,33 @@
return getContentProvider().getClass().getName();
}
+ @Override
public Cursor query(Uri uri, String[] projection,
- String selection, String[] selectionArgs, String sortOrder) {
+ String selection, String[] selectionArgs, String sortOrder,
+ ICancelationSignal cancelationSignal) {
enforceReadPermission(uri);
- return ContentProvider.this.query(uri, projection, selection,
- selectionArgs, sortOrder);
+ return ContentProvider.this.query(uri, projection, selection, selectionArgs, sortOrder,
+ CancelationSignal.fromTransport(cancelationSignal));
}
+ @Override
public String getType(Uri uri) {
return ContentProvider.this.getType(uri);
}
-
+ @Override
public Uri insert(Uri uri, ContentValues initialValues) {
enforceWritePermission(uri);
return ContentProvider.this.insert(uri, initialValues);
}
+ @Override
public int bulkInsert(Uri uri, ContentValues[] initialValues) {
enforceWritePermission(uri);
return ContentProvider.this.bulkInsert(uri, initialValues);
}
+ @Override
public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
throws OperationApplicationException {
for (ContentProviderOperation operation : operations) {
@@ -210,17 +216,20 @@
return ContentProvider.this.applyBatch(operations);
}
+ @Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
enforceWritePermission(uri);
return ContentProvider.this.delete(uri, selection, selectionArgs);
}
+ @Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
enforceWritePermission(uri);
return ContentProvider.this.update(uri, values, selection, selectionArgs);
}
+ @Override
public ParcelFileDescriptor openFile(Uri uri, String mode)
throws FileNotFoundException {
if (mode != null && mode.startsWith("rw")) enforceWritePermission(uri);
@@ -228,6 +237,7 @@
return ContentProvider.this.openFile(uri, mode);
}
+ @Override
public AssetFileDescriptor openAssetFile(Uri uri, String mode)
throws FileNotFoundException {
if (mode != null && mode.startsWith("rw")) enforceWritePermission(uri);
@@ -235,6 +245,7 @@
return ContentProvider.this.openAssetFile(uri, mode);
}
+ @Override
public Bundle call(String method, String arg, Bundle extras) {
return ContentProvider.this.call(method, arg, extras);
}
@@ -251,6 +262,11 @@
return ContentProvider.this.openTypedAssetFile(uri, mimeType, opts);
}
+ @Override
+ public ICancelationSignal createCancelationSignal() throws RemoteException {
+ return CancelationSignal.createTransport();
+ }
+
private void enforceReadPermission(Uri uri) {
final int uid = Binder.getCallingUid();
if (uid == mMyUid) {
@@ -541,6 +557,75 @@
String selection, String[] selectionArgs, String sortOrder);
/**
+ * Implement this to handle query requests from clients with support for cancelation.
+ * This method can be called from multiple threads, as described in
+ * <a href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes
+ * and Threads</a>.
+ * <p>
+ * Example client call:<p>
+ * <pre>// Request a specific record.
+ * Cursor managedCursor = managedQuery(
+ ContentUris.withAppendedId(Contacts.People.CONTENT_URI, 2),
+ projection, // Which columns to return.
+ null, // WHERE clause.
+ null, // WHERE clause value substitution
+ People.NAME + " ASC"); // Sort order.</pre>
+ * Example implementation:<p>
+ * <pre>// SQLiteQueryBuilder is a helper class that creates the
+ // proper SQL syntax for us.
+ SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
+
+ // Set the table we're querying.
+ qBuilder.setTables(DATABASE_TABLE_NAME);
+
+ // If the query ends in a specific record number, we're
+ // being asked for a specific record, so set the
+ // WHERE clause in our query.
+ if((URI_MATCHER.match(uri)) == SPECIFIC_MESSAGE){
+ qBuilder.appendWhere("_id=" + uri.getPathLeafId());
+ }
+
+ // Make the query.
+ Cursor c = qBuilder.query(mDb,
+ projection,
+ selection,
+ selectionArgs,
+ groupBy,
+ having,
+ sortOrder);
+ c.setNotificationUri(getContext().getContentResolver(), uri);
+ return c;</pre>
+ * <p>
+ * If you implement this method then you must also implement the version of
+ * {@link #query(Uri, String[], String, String[], String)} that does not take a cancelation
+ * provider to ensure correct operation on older versions of the Android Framework in
+ * which the cancelation signal overload was not available.
+ *
+ * @param uri The URI to query. This will be the full URI sent by the client;
+ * if the client is requesting a specific record, the URI will end in a record number
+ * that the implementation should parse and add to a WHERE or HAVING clause, specifying
+ * that _id value.
+ * @param projection The list of columns to put into the cursor. If
+ * null all columns are included.
+ * @param selection A selection criteria to apply when filtering rows.
+ * If null then all rows are included.
+ * @param selectionArgs You may include ?s in selection, which will be replaced by
+ * the values from selectionArgs, in order that they appear in the selection.
+ * The values will be bound as Strings.
+ * @param sortOrder How the rows in the cursor should be sorted.
+ * If null then the provider is free to define the sort order.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
+ * If the operation is canceled, then {@link OperationCanceledException} will be thrown
+ * when the query is executed.
+ * @return a Cursor or null.
+ */
+ public Cursor query(Uri uri, String[] projection,
+ String selection, String[] selectionArgs, String sortOrder,
+ CancelationSignal cancelationSignal) {
+ return query(uri, projection, selection, selectionArgs, sortOrder);
+ }
+
+ /**
* Implement this to handle requests for the MIME type of the data at the
* given URI. The returned MIME type should start with
* <code>vnd.android.cursor.item</code> for a single record,
diff --git a/core/java/android/content/ContentProviderClient.java b/core/java/android/content/ContentProviderClient.java
index 0540109..9a1fa65 100644
--- a/core/java/android/content/ContentProviderClient.java
+++ b/core/java/android/content/ContentProviderClient.java
@@ -47,7 +47,20 @@
/** See {@link ContentProvider#query ContentProvider.query} */
public Cursor query(Uri url, String[] projection, String selection,
String[] selectionArgs, String sortOrder) throws RemoteException {
- return mContentProvider.query(url, projection, selection, selectionArgs, sortOrder);
+ return query(url, projection, selection, selectionArgs, sortOrder, null);
+ }
+
+ /** See {@link ContentProvider#query ContentProvider.query} */
+ public Cursor query(Uri url, String[] projection, String selection,
+ String[] selectionArgs, String sortOrder, CancelationSignal cancelationSignal)
+ throws RemoteException {
+ ICancelationSignal remoteCancelationSignal = null;
+ if (cancelationSignal != null) {
+ remoteCancelationSignal = mContentProvider.createCancelationSignal();
+ cancelationSignal.setRemote(remoteCancelationSignal);
+ }
+ return mContentProvider.query(url, projection, selection, selectionArgs, sortOrder,
+ remoteCancelationSignal);
}
/** See {@link ContentProvider#getType ContentProvider.getType} */
diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java
index b089bf2..e0e277a 100644
--- a/core/java/android/content/ContentProviderNative.java
+++ b/core/java/android/content/ContentProviderNative.java
@@ -21,7 +21,6 @@
import android.database.BulkCursorToCursorAdaptor;
import android.database.Cursor;
import android.database.CursorToBulkCursorAdaptor;
-import android.database.CursorWindow;
import android.database.DatabaseUtils;
import android.database.IBulkCursor;
import android.database.IContentObserver;
@@ -41,8 +40,6 @@
* {@hide}
*/
abstract public class ContentProviderNative extends Binder implements IContentProvider {
- private static final String TAG = "ContentProvider";
-
public ContentProviderNative()
{
attachInterface(this, descriptor);
@@ -108,8 +105,11 @@
String sortOrder = data.readString();
IContentObserver observer = IContentObserver.Stub.asInterface(
data.readStrongBinder());
+ ICancelationSignal cancelationSignal = ICancelationSignal.Stub.asInterface(
+ data.readStrongBinder());
- Cursor cursor = query(url, projection, selection, selectionArgs, sortOrder);
+ Cursor cursor = query(url, projection, selection, selectionArgs, sortOrder,
+ cancelationSignal);
if (cursor != null) {
CursorToBulkCursorAdaptor adaptor = new CursorToBulkCursorAdaptor(
cursor, observer, getProviderName());
@@ -295,6 +295,16 @@
}
return true;
}
+
+ case CREATE_CANCELATION_SIGNAL_TRANSACTION:
+ {
+ data.enforceInterface(IContentProvider.descriptor);
+
+ ICancelationSignal cancelationSignal = createCancelationSignal();
+ reply.writeNoException();
+ reply.writeStrongBinder(cancelationSignal.asBinder());
+ return true;
+ }
}
} catch (Exception e) {
DatabaseUtils.writeExceptionToParcel(reply, e);
@@ -324,7 +334,8 @@
}
public Cursor query(Uri url, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) throws RemoteException {
+ String[] selectionArgs, String sortOrder, ICancelationSignal cancelationSignal)
+ throws RemoteException {
BulkCursorToCursorAdaptor adaptor = new BulkCursorToCursorAdaptor();
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
@@ -352,6 +363,7 @@
}
data.writeString(sortOrder);
data.writeStrongBinder(adaptor.getObserver().asBinder());
+ data.writeStrongBinder(cancelationSignal != null ? cancelationSignal.asBinder() : null);
mRemote.transact(IContentProvider.QUERY_TRANSACTION, data, reply, 0);
@@ -620,5 +632,24 @@
}
}
+ public ICancelationSignal createCancelationSignal() throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ try {
+ data.writeInterfaceToken(IContentProvider.descriptor);
+
+ mRemote.transact(IContentProvider.CREATE_CANCELATION_SIGNAL_TRANSACTION,
+ data, reply, 0);
+
+ DatabaseUtils.readExceptionFromParcel(reply);
+ ICancelationSignal cancelationSignal = ICancelationSignal.Stub.asInterface(
+ reply.readStrongBinder());
+ return cancelationSignal;
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
+ }
+
private IBinder mRemote;
}
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 0debb84..e79475a 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -22,6 +22,7 @@
import android.app.ActivityManagerNative;
import android.app.ActivityThread;
import android.app.AppGlobals;
+import android.content.ContentProvider.Transport;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.AssetFileDescriptor;
import android.content.res.Resources;
@@ -302,13 +303,62 @@
*/
public final Cursor query(Uri uri, String[] projection,
String selection, String[] selectionArgs, String sortOrder) {
+ return query(uri, projection, selection, selectionArgs, sortOrder, null);
+ }
+
+ /**
+ * <p>
+ * Query the given URI, returning a {@link Cursor} over the result set.
+ * </p>
+ * <p>
+ * For best performance, the caller should follow these guidelines:
+ * <ul>
+ * <li>Provide an explicit projection, to prevent
+ * reading data from storage that aren't going to be used.</li>
+ * <li>Use question mark parameter markers such as 'phone=?' instead of
+ * explicit values in the {@code selection} parameter, so that queries
+ * that differ only by those values will be recognized as the same
+ * for caching purposes.</li>
+ * </ul>
+ * </p>
+ *
+ * @param uri The URI, using the content:// scheme, for the content to
+ * retrieve.
+ * @param projection A list of which columns to return. Passing null will
+ * return all columns, which is inefficient.
+ * @param selection A filter declaring which rows to return, formatted as an
+ * SQL WHERE clause (excluding the WHERE itself). Passing null will
+ * return all rows for the given URI.
+ * @param selectionArgs You may include ?s in selection, which will be
+ * replaced by the values from selectionArgs, in the order that they
+ * appear in the selection. The values will be bound as Strings.
+ * @param sortOrder How to order the rows, formatted as an SQL ORDER BY
+ * clause (excluding the ORDER BY itself). Passing null will use the
+ * default sort order, which may be unordered.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
+ * If the operation is canceled, then {@link OperationCanceledException} will be thrown
+ * when the query is executed.
+ * @return A Cursor object, which is positioned before the first entry, or null
+ * @see Cursor
+ */
+ public final Cursor query(final Uri uri, String[] projection,
+ String selection, String[] selectionArgs, String sortOrder,
+ CancelationSignal cancelationSignal) {
IContentProvider provider = acquireProvider(uri);
if (provider == null) {
return null;
}
try {
long startTime = SystemClock.uptimeMillis();
- Cursor qCursor = provider.query(uri, projection, selection, selectionArgs, sortOrder);
+
+ ICancelationSignal remoteCancelationSignal = null;
+ if (cancelationSignal != null) {
+ cancelationSignal.throwIfCanceled();
+ remoteCancelationSignal = provider.createCancelationSignal();
+ cancelationSignal.setRemote(remoteCancelationSignal);
+ }
+ Cursor qCursor = provider.query(uri, projection,
+ selection, selectionArgs, sortOrder, remoteCancelationSignal);
if (qCursor == null) {
releaseProvider(provider);
return null;
diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java
index 7af535b..6e4aca8 100644
--- a/core/java/android/content/CursorLoader.java
+++ b/core/java/android/content/CursorLoader.java
@@ -19,7 +19,6 @@
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
-import android.os.AsyncTask;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -49,18 +48,42 @@
String mSortOrder;
Cursor mCursor;
+ CancelationSignal mCancelationSignal;
/* Runs on a worker thread */
@Override
public Cursor loadInBackground() {
- Cursor cursor = getContext().getContentResolver().query(mUri, mProjection, mSelection,
- mSelectionArgs, mSortOrder);
- if (cursor != null) {
- // Ensure the cursor window is filled
- cursor.getCount();
- registerContentObserver(cursor, mObserver);
+ synchronized (this) {
+ if (isLoadInBackgroundCanceled()) {
+ throw new OperationCanceledException();
+ }
+ mCancelationSignal = new CancelationSignal();
}
- return cursor;
+ try {
+ Cursor cursor = getContext().getContentResolver().query(mUri, mProjection, mSelection,
+ mSelectionArgs, mSortOrder, mCancelationSignal);
+ if (cursor != null) {
+ // Ensure the cursor window is filled
+ cursor.getCount();
+ registerContentObserver(cursor, mObserver);
+ }
+ return cursor;
+ } finally {
+ synchronized (this) {
+ mCancelationSignal = null;
+ }
+ }
+ }
+
+ @Override
+ protected void onCancelLoadInBackground() {
+ super.onCancelLoadInBackground();
+
+ synchronized (this) {
+ if (mCancelationSignal != null) {
+ mCancelationSignal.cancel();
+ }
+ }
}
/**
diff --git a/core/java/android/content/ICancelationSignal.aidl b/core/java/android/content/ICancelationSignal.aidl
new file mode 100644
index 0000000..3f5a24d
--- /dev/null
+++ b/core/java/android/content/ICancelationSignal.aidl
@@ -0,0 +1,24 @@
+/*
+ * 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.content;
+
+/**
+ * @hide
+ */
+interface ICancelationSignal {
+ oneway void cancel();
+}
diff --git a/core/java/android/content/IContentProvider.java b/core/java/android/content/IContentProvider.java
index 2a67ff8..f52157f 100644
--- a/core/java/android/content/IContentProvider.java
+++ b/core/java/android/content/IContentProvider.java
@@ -34,7 +34,8 @@
*/
public interface IContentProvider extends IInterface {
public Cursor query(Uri url, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) throws RemoteException;
+ String[] selectionArgs, String sortOrder, ICancelationSignal cancelationSignal)
+ throws RemoteException;
public String getType(Uri url) throws RemoteException;
public Uri insert(Uri url, ContentValues initialValues)
throws RemoteException;
@@ -50,6 +51,7 @@
public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
throws RemoteException, OperationApplicationException;
public Bundle call(String method, String arg, Bundle extras) throws RemoteException;
+ public ICancelationSignal createCancelationSignal() throws RemoteException;
// Data interchange.
public String[] getStreamTypes(Uri url, String mimeTypeFilter) throws RemoteException;
@@ -71,4 +73,5 @@
static final int CALL_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 20;
static final int GET_STREAM_TYPES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 21;
static final int OPEN_TYPED_ASSET_FILE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 22;
+ static final int CREATE_CANCELATION_SIGNAL_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 23;
}
diff --git a/core/java/android/content/OperationCanceledException.java b/core/java/android/content/OperationCanceledException.java
new file mode 100644
index 0000000..24afcfa
--- /dev/null
+++ b/core/java/android/content/OperationCanceledException.java
@@ -0,0 +1,32 @@
+/*
+ * 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.content;
+
+/**
+ * An exception type that is thrown when an operation in progress is canceled.
+ *
+ * @see CancelationSignal
+ */
+public class OperationCanceledException extends RuntimeException {
+ public OperationCanceledException() {
+ this(null);
+ }
+
+ public OperationCanceledException(String message) {
+ super(message != null ? message : "The operation has been canceled.");
+ }
+}
diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java
index 72f62fd..710bd53 100644
--- a/core/java/android/database/sqlite/SQLiteConnection.java
+++ b/core/java/android/database/sqlite/SQLiteConnection.java
@@ -19,6 +19,8 @@
import dalvik.system.BlockGuard;
import dalvik.system.CloseGuard;
+import android.content.CancelationSignal;
+import android.content.OperationCanceledException;
import android.database.Cursor;
import android.database.CursorWindow;
import android.database.DatabaseUtils;
@@ -82,7 +84,7 @@
*
* @hide
*/
-public final class SQLiteConnection {
+public final class SQLiteConnection implements CancelationSignal.OnCancelListener {
private static final String TAG = "SQLiteConnection";
private static final boolean DEBUG = false;
@@ -108,6 +110,12 @@
private boolean mOnlyAllowReadOnlyOperations;
+ // The number of times attachCancelationSignal has been called.
+ // Because SQLite statement execution can be re-entrant, we keep track of how many
+ // times we have attempted to attach a cancelation signal to the connection so that
+ // we can ensure that we detach the signal at the right time.
+ private int mCancelationSignalAttachCount;
+
private static native int nativeOpen(String path, int openFlags, String label,
boolean enableTrace, boolean enableProfile);
private static native void nativeClose(int connectionPtr);
@@ -145,6 +153,8 @@
int connectionPtr, int statementPtr, int windowPtr,
int startPos, int requiredPos, boolean countAllRows);
private static native int nativeGetDbLookaside(int connectionPtr);
+ private static native void nativeCancel(int connectionPtr);
+ private static native void nativeResetCancel(int connectionPtr, boolean cancelable);
private SQLiteConnection(SQLiteConnectionPool pool,
SQLiteDatabaseConfiguration configuration,
@@ -345,11 +355,14 @@
*
* @param sql The SQL statement to execute.
* @param bindArgs The arguments to bind, or null if none.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public void execute(String sql, Object[] bindArgs) {
+ public void execute(String sql, Object[] bindArgs,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
@@ -361,7 +374,12 @@
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
applyBlockGuardPolicy(statement);
- nativeExecute(mConnectionPtr, statement.mStatementPtr);
+ attachCancelationSignal(cancelationSignal);
+ try {
+ nativeExecute(mConnectionPtr, statement.mStatementPtr);
+ } finally {
+ detachCancelationSignal(cancelationSignal);
+ }
} finally {
releasePreparedStatement(statement);
}
@@ -378,13 +396,16 @@
*
* @param sql The SQL statement to execute.
* @param bindArgs The arguments to bind, or null if none.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The value of the first column in the first row of the result set
* as a <code>long</code>, or zero if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public long executeForLong(String sql, Object[] bindArgs) {
+ public long executeForLong(String sql, Object[] bindArgs,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
@@ -396,7 +417,12 @@
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
applyBlockGuardPolicy(statement);
- return nativeExecuteForLong(mConnectionPtr, statement.mStatementPtr);
+ attachCancelationSignal(cancelationSignal);
+ try {
+ return nativeExecuteForLong(mConnectionPtr, statement.mStatementPtr);
+ } finally {
+ detachCancelationSignal(cancelationSignal);
+ }
} finally {
releasePreparedStatement(statement);
}
@@ -413,13 +439,16 @@
*
* @param sql The SQL statement to execute.
* @param bindArgs The arguments to bind, or null if none.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The value of the first column in the first row of the result set
* as a <code>String</code>, or null if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public String executeForString(String sql, Object[] bindArgs) {
+ public String executeForString(String sql, Object[] bindArgs,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
@@ -431,7 +460,12 @@
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
applyBlockGuardPolicy(statement);
- return nativeExecuteForString(mConnectionPtr, statement.mStatementPtr);
+ attachCancelationSignal(cancelationSignal);
+ try {
+ return nativeExecuteForString(mConnectionPtr, statement.mStatementPtr);
+ } finally {
+ detachCancelationSignal(cancelationSignal);
+ }
} finally {
releasePreparedStatement(statement);
}
@@ -449,14 +483,17 @@
*
* @param sql The SQL statement to execute.
* @param bindArgs The arguments to bind, or null if none.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The file descriptor for a shared memory region that contains
* the value of the first column in the first row of the result set as a BLOB,
* or null if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public ParcelFileDescriptor executeForBlobFileDescriptor(String sql, Object[] bindArgs) {
+ public ParcelFileDescriptor executeForBlobFileDescriptor(String sql, Object[] bindArgs,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
@@ -469,9 +506,14 @@
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
applyBlockGuardPolicy(statement);
- int fd = nativeExecuteForBlobFileDescriptor(
- mConnectionPtr, statement.mStatementPtr);
- return fd >= 0 ? ParcelFileDescriptor.adoptFd(fd) : null;
+ attachCancelationSignal(cancelationSignal);
+ try {
+ int fd = nativeExecuteForBlobFileDescriptor(
+ mConnectionPtr, statement.mStatementPtr);
+ return fd >= 0 ? ParcelFileDescriptor.adoptFd(fd) : null;
+ } finally {
+ detachCancelationSignal(cancelationSignal);
+ }
} finally {
releasePreparedStatement(statement);
}
@@ -489,12 +531,15 @@
*
* @param sql The SQL statement to execute.
* @param bindArgs The arguments to bind, or null if none.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The number of rows that were changed.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public int executeForChangedRowCount(String sql, Object[] bindArgs) {
+ public int executeForChangedRowCount(String sql, Object[] bindArgs,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
@@ -507,8 +552,13 @@
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
applyBlockGuardPolicy(statement);
- return nativeExecuteForChangedRowCount(
- mConnectionPtr, statement.mStatementPtr);
+ attachCancelationSignal(cancelationSignal);
+ try {
+ return nativeExecuteForChangedRowCount(
+ mConnectionPtr, statement.mStatementPtr);
+ } finally {
+ detachCancelationSignal(cancelationSignal);
+ }
} finally {
releasePreparedStatement(statement);
}
@@ -526,12 +576,15 @@
*
* @param sql The SQL statement to execute.
* @param bindArgs The arguments to bind, or null if none.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The row id of the last row that was inserted, or 0 if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public long executeForLastInsertedRowId(String sql, Object[] bindArgs) {
+ public long executeForLastInsertedRowId(String sql, Object[] bindArgs,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
@@ -544,8 +597,13 @@
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
applyBlockGuardPolicy(statement);
- return nativeExecuteForLastInsertedRowId(
- mConnectionPtr, statement.mStatementPtr);
+ attachCancelationSignal(cancelationSignal);
+ try {
+ return nativeExecuteForLastInsertedRowId(
+ mConnectionPtr, statement.mStatementPtr);
+ } finally {
+ detachCancelationSignal(cancelationSignal);
+ }
} finally {
releasePreparedStatement(statement);
}
@@ -571,14 +629,17 @@
* so that it does. Must be greater than or equal to <code>startPos</code>.
* @param countAllRows True to count all rows that the query would return
* regagless of whether they fit in the window.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The number of rows that were counted during query execution. Might
* not be all rows in the result set unless <code>countAllRows</code> is true.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
public int executeForCursorWindow(String sql, Object[] bindArgs,
- CursorWindow window, int startPos, int requiredPos, boolean countAllRows) {
+ CursorWindow window, int startPos, int requiredPos, boolean countAllRows,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
@@ -597,14 +658,19 @@
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
applyBlockGuardPolicy(statement);
- final long result = nativeExecuteForCursorWindow(
- mConnectionPtr, statement.mStatementPtr, window.mWindowPtr,
- startPos, requiredPos, countAllRows);
- actualPos = (int)(result >> 32);
- countedRows = (int)result;
- filledRows = window.getNumRows();
- window.setStartPosition(actualPos);
- return countedRows;
+ attachCancelationSignal(cancelationSignal);
+ try {
+ final long result = nativeExecuteForCursorWindow(
+ mConnectionPtr, statement.mStatementPtr, window.mWindowPtr,
+ startPos, requiredPos, countAllRows);
+ actualPos = (int)(result >> 32);
+ countedRows = (int)result;
+ filledRows = window.getNumRows();
+ window.setStartPosition(actualPos);
+ return countedRows;
+ } finally {
+ detachCancelationSignal(cancelationSignal);
+ }
} finally {
releasePreparedStatement(statement);
}
@@ -685,6 +751,46 @@
recyclePreparedStatement(statement);
}
+ private void attachCancelationSignal(CancelationSignal cancelationSignal) {
+ if (cancelationSignal != null) {
+ cancelationSignal.throwIfCanceled();
+
+ mCancelationSignalAttachCount += 1;
+ if (mCancelationSignalAttachCount == 1) {
+ // Reset cancelation flag before executing the statement.
+ nativeResetCancel(mConnectionPtr, true /*cancelable*/);
+
+ // After this point, onCancel() may be called concurrently.
+ cancelationSignal.setOnCancelListener(this);
+ }
+ }
+ }
+
+ private void detachCancelationSignal(CancelationSignal cancelationSignal) {
+ if (cancelationSignal != null) {
+ assert mCancelationSignalAttachCount > 0;
+
+ mCancelationSignalAttachCount -= 1;
+ if (mCancelationSignalAttachCount == 0) {
+ // After this point, onCancel() cannot be called concurrently.
+ cancelationSignal.setOnCancelListener(null);
+
+ // Reset cancelation flag after executing the statement.
+ nativeResetCancel(mConnectionPtr, false /*cancelable*/);
+ }
+ }
+ }
+
+ // CancelationSignal.OnCancelationListener callback.
+ // This method may be called on a different thread than the executing statement.
+ // However, it will only be called between calls to attachCancelationSignal and
+ // detachCancelationSignal, while a statement is executing. We can safely assume
+ // that the SQLite connection is still alive.
+ @Override
+ public void onCancel() {
+ nativeCancel(mConnectionPtr);
+ }
+
private void bindArguments(PreparedStatement statement, Object[] bindArgs) {
final int count = bindArgs != null ? bindArgs.length : 0;
if (count != statement.mNumParameters) {
@@ -822,8 +928,8 @@
long pageCount = 0;
long pageSize = 0;
try {
- pageCount = executeForLong("PRAGMA page_count;", null);
- pageSize = executeForLong("PRAGMA page_size;", null);
+ pageCount = executeForLong("PRAGMA page_count;", null, null);
+ pageSize = executeForLong("PRAGMA page_size;", null, null);
} catch (SQLiteException ex) {
// Ignore.
}
@@ -834,15 +940,15 @@
// the main database which we have already described.
CursorWindow window = new CursorWindow("collectDbStats");
try {
- executeForCursorWindow("PRAGMA database_list;", null, window, 0, 0, false);
+ executeForCursorWindow("PRAGMA database_list;", null, window, 0, 0, false, null);
for (int i = 1; i < window.getNumRows(); i++) {
String name = window.getString(i, 1);
String path = window.getString(i, 2);
pageCount = 0;
pageSize = 0;
try {
- pageCount = executeForLong("PRAGMA " + name + ".page_count;", null);
- pageSize = executeForLong("PRAGMA " + name + ".page_size;", null);
+ pageCount = executeForLong("PRAGMA " + name + ".page_count;", null, null);
+ pageSize = executeForLong("PRAGMA " + name + ".page_size;", null, null);
} catch (SQLiteException ex) {
// Ignore.
}
diff --git a/core/java/android/database/sqlite/SQLiteConnectionPool.java b/core/java/android/database/sqlite/SQLiteConnectionPool.java
index 5469213..d335738 100644
--- a/core/java/android/database/sqlite/SQLiteConnectionPool.java
+++ b/core/java/android/database/sqlite/SQLiteConnectionPool.java
@@ -18,6 +18,8 @@
import dalvik.system.CloseGuard;
+import android.content.CancelationSignal;
+import android.content.OperationCanceledException;
import android.database.sqlite.SQLiteDebug.DbStats;
import android.os.SystemClock;
import android.util.Log;
@@ -282,13 +284,16 @@
* @param sql If not null, try to find a connection that already has
* the specified SQL statement in its prepared statement cache.
* @param connectionFlags The connection request flags.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The connection that was acquired, never null.
*
* @throws IllegalStateException if the pool has been closed.
* @throws SQLiteException if a database error occurs.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public SQLiteConnection acquireConnection(String sql, int connectionFlags) {
- return waitForConnection(sql, connectionFlags);
+ public SQLiteConnection acquireConnection(String sql, int connectionFlags,
+ CancelationSignal cancelationSignal) {
+ return waitForConnection(sql, connectionFlags, cancelationSignal);
}
/**
@@ -497,7 +502,8 @@
}
// Might throw.
- private SQLiteConnection waitForConnection(String sql, int connectionFlags) {
+ private SQLiteConnection waitForConnection(String sql, int connectionFlags,
+ CancelationSignal cancelationSignal) {
final boolean wantPrimaryConnection =
(connectionFlags & CONNECTION_FLAG_PRIMARY_CONNECTION_AFFINITY) != 0;
@@ -505,6 +511,11 @@
synchronized (mLock) {
throwIfClosedLocked();
+ // Abort if canceled.
+ if (cancelationSignal != null) {
+ cancelationSignal.throwIfCanceled();
+ }
+
// Try to acquire a connection.
SQLiteConnection connection = null;
if (!wantPrimaryConnection) {
@@ -538,6 +549,18 @@
} else {
mConnectionWaiterQueue = waiter;
}
+
+ if (cancelationSignal != null) {
+ final int nonce = waiter.mNonce;
+ cancelationSignal.setOnCancelListener(new CancelationSignal.OnCancelListener() {
+ @Override
+ public void onCancel() {
+ synchronized (mLock) {
+ cancelConnectionWaiterLocked(waiter, nonce);
+ }
+ }
+ });
+ }
}
// Park the thread until a connection is assigned or the pool is closed.
@@ -547,7 +570,9 @@
for (;;) {
// Detect and recover from connection leaks.
if (mConnectionLeaked.compareAndSet(true, false)) {
- wakeConnectionWaitersLocked();
+ synchronized (mLock) {
+ wakeConnectionWaitersLocked();
+ }
}
// Wait to be unparked (may already have happened), a timeout, or interruption.
@@ -560,15 +585,16 @@
synchronized (mLock) {
throwIfClosedLocked();
- SQLiteConnection connection = waiter.mAssignedConnection;
- if (connection != null) {
+ final SQLiteConnection connection = waiter.mAssignedConnection;
+ final RuntimeException ex = waiter.mException;
+ if (connection != null || ex != null) {
+ if (cancelationSignal != null) {
+ cancelationSignal.setOnCancelListener(null);
+ }
recycleConnectionWaiterLocked(waiter);
- return connection;
- }
-
- RuntimeException ex = waiter.mException;
- if (ex != null) {
- recycleConnectionWaiterLocked(waiter);
+ if (connection != null) {
+ return connection;
+ }
throw ex; // rethrow!
}
@@ -585,6 +611,40 @@
}
// Can't throw.
+ private void cancelConnectionWaiterLocked(ConnectionWaiter waiter, int nonce) {
+ if (waiter.mNonce != nonce) {
+ // Waiter already removed and recycled.
+ return;
+ }
+
+ if (waiter.mAssignedConnection != null || waiter.mException != null) {
+ // Waiter is done waiting but has not woken up yet.
+ return;
+ }
+
+ // Waiter must still be waiting. Dequeue it.
+ ConnectionWaiter predecessor = null;
+ ConnectionWaiter current = mConnectionWaiterQueue;
+ while (current != waiter) {
+ assert current != null;
+ predecessor = current;
+ current = current.mNext;
+ }
+ if (predecessor != null) {
+ predecessor.mNext = waiter.mNext;
+ } else {
+ mConnectionWaiterQueue = waiter.mNext;
+ }
+
+ // Send the waiter an exception and unpark it.
+ waiter.mException = new OperationCanceledException();
+ LockSupport.unpark(waiter.mThread);
+
+ // Check whether removing this waiter will enable other waiters to make progress.
+ wakeConnectionWaitersLocked();
+ }
+
+ // Can't throw.
private void logConnectionPoolBusyLocked(long waitMillis, int connectionFlags) {
final Thread thread = Thread.currentThread();
StringBuilder msg = new StringBuilder();
@@ -826,6 +886,7 @@
waiter.mSql = null;
waiter.mAssignedConnection = null;
waiter.mException = null;
+ waiter.mNonce += 1;
mConnectionWaiterPool = waiter;
}
@@ -904,5 +965,6 @@
public int mConnectionFlags;
public SQLiteConnection mAssignedConnection;
public RuntimeException mException;
+ public int mNonce;
}
}
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index 9cb6480..7db7bfb 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -16,7 +16,9 @@
package android.database.sqlite;
+import android.content.CancelationSignal;
import android.content.ContentValues;
+import android.content.OperationCanceledException;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
@@ -492,7 +494,7 @@
boolean exclusive) {
getThreadSession().beginTransaction(exclusive ? SQLiteSession.TRANSACTION_MODE_EXCLUSIVE :
SQLiteSession.TRANSACTION_MODE_IMMEDIATE, transactionListener,
- getThreadDefaultConnectionFlags(false /*readOnly*/));
+ getThreadDefaultConnectionFlags(false /*readOnly*/), null);
}
/**
@@ -500,7 +502,7 @@
* are committed and rolled back.
*/
public void endTransaction() {
- getThreadSession().endTransaction();
+ getThreadSession().endTransaction(null);
}
/**
@@ -597,7 +599,7 @@
}
private boolean yieldIfContendedHelper(boolean throwIfUnsafe, long sleepAfterYieldDelay) {
- return getThreadSession().yieldTransaction(sleepAfterYieldDelay, throwIfUnsafe);
+ return getThreadSession().yieldTransaction(sleepAfterYieldDelay, throwIfUnsafe, null);
}
/**
@@ -935,7 +937,48 @@
String selection, String[] selectionArgs, String groupBy,
String having, String orderBy, String limit) {
return queryWithFactory(null, distinct, table, columns, selection, selectionArgs,
- groupBy, having, orderBy, limit);
+ groupBy, having, orderBy, limit, null);
+ }
+
+ /**
+ * Query the given URL, returning a {@link Cursor} over the result set.
+ *
+ * @param distinct true if you want each row to be unique, false otherwise.
+ * @param table The table name to compile the query against.
+ * @param columns A list of which columns to return. Passing null will
+ * return all columns, which is discouraged to prevent reading
+ * data from storage that isn't going to be used.
+ * @param selection A filter declaring which rows to return, formatted as an
+ * SQL WHERE clause (excluding the WHERE itself). Passing null
+ * will return all rows for the given table.
+ * @param selectionArgs You may include ?s in selection, which will be
+ * replaced by the values from selectionArgs, in order that they
+ * appear in the selection. The values will be bound as Strings.
+ * @param groupBy A filter declaring how to group rows, formatted as an SQL
+ * GROUP BY clause (excluding the GROUP BY itself). Passing null
+ * will cause the rows to not be grouped.
+ * @param having A filter declare which row groups to include in the cursor,
+ * if row grouping is being used, formatted as an SQL HAVING
+ * clause (excluding the HAVING itself). Passing null will cause
+ * all row groups to be included, and is required when row
+ * grouping is not being used.
+ * @param orderBy How to order the rows, formatted as an SQL ORDER BY clause
+ * (excluding the ORDER BY itself). Passing null will use the
+ * default sort order, which may be unordered.
+ * @param limit Limits the number of rows returned by the query,
+ * formatted as LIMIT clause. Passing null denotes no LIMIT clause.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
+ * If the operation is canceled, then {@link OperationCanceledException} will be thrown
+ * when the query is executed.
+ * @return A {@link Cursor} object, which is positioned before the first entry. Note that
+ * {@link Cursor}s are not synchronized, see the documentation for more details.
+ * @see Cursor
+ */
+ public Cursor query(boolean distinct, String table, String[] columns,
+ String selection, String[] selectionArgs, String groupBy,
+ String having, String orderBy, String limit, CancelationSignal cancelationSignal) {
+ return queryWithFactory(null, distinct, table, columns, selection, selectionArgs,
+ groupBy, having, orderBy, limit, cancelationSignal);
}
/**
@@ -974,12 +1017,55 @@
boolean distinct, String table, String[] columns,
String selection, String[] selectionArgs, String groupBy,
String having, String orderBy, String limit) {
+ return queryWithFactory(cursorFactory, distinct, table, columns, selection,
+ selectionArgs, groupBy, having, orderBy, limit, null);
+ }
+
+ /**
+ * Query the given URL, returning a {@link Cursor} over the result set.
+ *
+ * @param cursorFactory the cursor factory to use, or null for the default factory
+ * @param distinct true if you want each row to be unique, false otherwise.
+ * @param table The table name to compile the query against.
+ * @param columns A list of which columns to return. Passing null will
+ * return all columns, which is discouraged to prevent reading
+ * data from storage that isn't going to be used.
+ * @param selection A filter declaring which rows to return, formatted as an
+ * SQL WHERE clause (excluding the WHERE itself). Passing null
+ * will return all rows for the given table.
+ * @param selectionArgs You may include ?s in selection, which will be
+ * replaced by the values from selectionArgs, in order that they
+ * appear in the selection. The values will be bound as Strings.
+ * @param groupBy A filter declaring how to group rows, formatted as an SQL
+ * GROUP BY clause (excluding the GROUP BY itself). Passing null
+ * will cause the rows to not be grouped.
+ * @param having A filter declare which row groups to include in the cursor,
+ * if row grouping is being used, formatted as an SQL HAVING
+ * clause (excluding the HAVING itself). Passing null will cause
+ * all row groups to be included, and is required when row
+ * grouping is not being used.
+ * @param orderBy How to order the rows, formatted as an SQL ORDER BY clause
+ * (excluding the ORDER BY itself). Passing null will use the
+ * default sort order, which may be unordered.
+ * @param limit Limits the number of rows returned by the query,
+ * formatted as LIMIT clause. Passing null denotes no LIMIT clause.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
+ * If the operation is canceled, then {@link OperationCanceledException} will be thrown
+ * when the query is executed.
+ * @return A {@link Cursor} object, which is positioned before the first entry. Note that
+ * {@link Cursor}s are not synchronized, see the documentation for more details.
+ * @see Cursor
+ */
+ public Cursor queryWithFactory(CursorFactory cursorFactory,
+ boolean distinct, String table, String[] columns,
+ String selection, String[] selectionArgs, String groupBy,
+ String having, String orderBy, String limit, CancelationSignal cancelationSignal) {
throwIfNotOpen(); // fail fast
String sql = SQLiteQueryBuilder.buildQueryString(
distinct, table, columns, selection, groupBy, having, orderBy, limit);
- return rawQueryWithFactory(
- cursorFactory, sql, selectionArgs, findEditTable(table));
+ return rawQueryWithFactory(cursorFactory, sql, selectionArgs,
+ findEditTable(table), cancelationSignal);
}
/**
@@ -1067,7 +1153,25 @@
* {@link Cursor}s are not synchronized, see the documentation for more details.
*/
public Cursor rawQuery(String sql, String[] selectionArgs) {
- return rawQueryWithFactory(null, sql, selectionArgs, null);
+ return rawQueryWithFactory(null, sql, selectionArgs, null, null);
+ }
+
+ /**
+ * Runs the provided SQL and returns a {@link Cursor} over the result set.
+ *
+ * @param sql the SQL query. The SQL string must not be ; terminated
+ * @param selectionArgs You may include ?s in where clause in the query,
+ * which will be replaced by the values from selectionArgs. The
+ * values will be bound as Strings.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
+ * If the operation is canceled, then {@link OperationCanceledException} will be thrown
+ * when the query is executed.
+ * @return A {@link Cursor} object, which is positioned before the first entry. Note that
+ * {@link Cursor}s are not synchronized, see the documentation for more details.
+ */
+ public Cursor rawQuery(String sql, String[] selectionArgs,
+ CancelationSignal cancelationSignal) {
+ return rawQueryWithFactory(null, sql, selectionArgs, null, cancelationSignal);
}
/**
@@ -1085,9 +1189,31 @@
public Cursor rawQueryWithFactory(
CursorFactory cursorFactory, String sql, String[] selectionArgs,
String editTable) {
+ return rawQueryWithFactory(cursorFactory, sql, selectionArgs, editTable, null);
+ }
+
+ /**
+ * Runs the provided SQL and returns a cursor over the result set.
+ *
+ * @param cursorFactory the cursor factory to use, or null for the default factory
+ * @param sql the SQL query. The SQL string must not be ; terminated
+ * @param selectionArgs You may include ?s in where clause in the query,
+ * which will be replaced by the values from selectionArgs. The
+ * values will be bound as Strings.
+ * @param editTable the name of the first table, which is editable
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
+ * If the operation is canceled, then {@link OperationCanceledException} will be thrown
+ * when the query is executed.
+ * @return A {@link Cursor} object, which is positioned before the first entry. Note that
+ * {@link Cursor}s are not synchronized, see the documentation for more details.
+ */
+ public Cursor rawQueryWithFactory(
+ CursorFactory cursorFactory, String sql, String[] selectionArgs,
+ String editTable, CancelationSignal cancelationSignal) {
throwIfNotOpen(); // fail fast
- SQLiteCursorDriver driver = new SQLiteDirectCursorDriver(this, sql, editTable);
+ SQLiteCursorDriver driver = new SQLiteDirectCursorDriver(this, sql, editTable,
+ cancelationSignal);
return driver.query(cursorFactory != null ? cursorFactory : mCursorFactory,
selectionArgs);
}
@@ -1786,7 +1912,7 @@
*/
void lockPrimaryConnection() {
getThreadSession().beginTransaction(SQLiteSession.TRANSACTION_MODE_DEFERRED,
- null, SQLiteConnectionPool.CONNECTION_FLAG_PRIMARY_CONNECTION_AFFINITY);
+ null, SQLiteConnectionPool.CONNECTION_FLAG_PRIMARY_CONNECTION_AFFINITY, null);
}
/**
@@ -1795,7 +1921,7 @@
* @see #lockPrimaryConnection()
*/
void unlockPrimaryConnection() {
- getThreadSession().endTransaction();
+ getThreadSession().endTransaction(null);
}
@Override
diff --git a/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java b/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java
index 52fd1d2..c490dc6 100644
--- a/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java
+++ b/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java
@@ -16,6 +16,7 @@
package android.database.sqlite;
+import android.content.CancelationSignal;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
@@ -28,16 +29,19 @@
private final SQLiteDatabase mDatabase;
private final String mEditTable;
private final String mSql;
+ private final CancelationSignal mCancelationSignal;
private SQLiteQuery mQuery;
- public SQLiteDirectCursorDriver(SQLiteDatabase db, String sql, String editTable) {
+ public SQLiteDirectCursorDriver(SQLiteDatabase db, String sql, String editTable,
+ CancelationSignal cancelationSignal) {
mDatabase = db;
mEditTable = editTable;
mSql = sql;
+ mCancelationSignal = cancelationSignal;
}
public Cursor query(CursorFactory factory, String[] selectionArgs) {
- final SQLiteQuery query = new SQLiteQuery(mDatabase, mSql);
+ final SQLiteQuery query = new SQLiteQuery(mDatabase, mSql, mCancelationSignal);
final Cursor cursor;
try {
query.bindAllArgsAsStrings(selectionArgs);
diff --git a/core/java/android/database/sqlite/SQLiteProgram.java b/core/java/android/database/sqlite/SQLiteProgram.java
index 8194458..f3da2a6 100644
--- a/core/java/android/database/sqlite/SQLiteProgram.java
+++ b/core/java/android/database/sqlite/SQLiteProgram.java
@@ -16,6 +16,7 @@
package android.database.sqlite;
+import android.content.CancelationSignal;
import android.database.DatabaseUtils;
import java.util.Arrays;
@@ -36,7 +37,8 @@
private final int mNumParameters;
private final Object[] mBindArgs;
- SQLiteProgram(SQLiteDatabase db, String sql, Object[] bindArgs) {
+ SQLiteProgram(SQLiteDatabase db, String sql, Object[] bindArgs,
+ CancelationSignal cancelationSignalForPrepare) {
mDatabase = db;
mSql = sql.trim();
@@ -54,7 +56,8 @@
boolean assumeReadOnly = (n == DatabaseUtils.STATEMENT_SELECT);
SQLiteStatementInfo info = new SQLiteStatementInfo();
db.getThreadSession().prepare(mSql,
- db.getThreadDefaultConnectionFlags(assumeReadOnly), info);
+ db.getThreadDefaultConnectionFlags(assumeReadOnly),
+ cancelationSignalForPrepare, info);
mReadOnly = info.readOnly;
mColumnNames = info.columnNames;
mNumParameters = info.numParameters;
diff --git a/core/java/android/database/sqlite/SQLiteQuery.java b/core/java/android/database/sqlite/SQLiteQuery.java
index 17aa886..df2e260 100644
--- a/core/java/android/database/sqlite/SQLiteQuery.java
+++ b/core/java/android/database/sqlite/SQLiteQuery.java
@@ -16,6 +16,8 @@
package android.database.sqlite;
+import android.content.CancelationSignal;
+import android.content.OperationCanceledException;
import android.database.CursorWindow;
import android.util.Log;
@@ -29,8 +31,12 @@
public final class SQLiteQuery extends SQLiteProgram {
private static final String TAG = "SQLiteQuery";
- SQLiteQuery(SQLiteDatabase db, String query) {
- super(db, query, null);
+ private final CancelationSignal mCancelationSignal;
+
+ SQLiteQuery(SQLiteDatabase db, String query, CancelationSignal cancelationSignal) {
+ super(db, query, null, cancelationSignal);
+
+ mCancelationSignal = cancelationSignal;
}
/**
@@ -44,6 +50,9 @@
* return regardless of whether they fit in the window.
* @return Number of rows that were enumerated. Might not be all rows
* unless countAllRows is true.
+ *
+ * @throws SQLiteException if an error occurs.
+ * @throws OperationCanceledException if the operation was canceled.
*/
int fillWindow(CursorWindow window, int startPos, int requiredPos, boolean countAllRows) {
acquireReference();
@@ -51,7 +60,8 @@
window.acquireReference();
try {
int numRows = getSession().executeForCursorWindow(getSql(), getBindArgs(),
- window, startPos, requiredPos, countAllRows, getConnectionFlags());
+ window, startPos, requiredPos, countAllRows, getConnectionFlags(),
+ mCancelationSignal);
return numRows;
} catch (SQLiteDatabaseCorruptException ex) {
onCorruption();
diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
index 1b7b398..89469cb 100644
--- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java
+++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
@@ -16,6 +16,8 @@
package android.database.sqlite;
+import android.content.CancelationSignal;
+import android.content.OperationCanceledException;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.provider.BaseColumns;
@@ -137,8 +139,9 @@
/**
* Sets the cursor factory to be used for the query. You can use
* one factory for all queries on a database but it is normally
- * easier to specify the factory when doing this query. @param
- * factory the factor to use
+ * easier to specify the factory when doing this query.
+ *
+ * @param factory the factory to use.
*/
public void setCursorFactory(SQLiteDatabase.CursorFactory factory) {
mFactory = factory;
@@ -289,7 +292,7 @@
String selection, String[] selectionArgs, String groupBy,
String having, String sortOrder) {
return query(db, projectionIn, selection, selectionArgs, groupBy, having, sortOrder,
- null /* limit */);
+ null /* limit */, null /* cancelationSignal */);
}
/**
@@ -327,6 +330,48 @@
public Cursor query(SQLiteDatabase db, String[] projectionIn,
String selection, String[] selectionArgs, String groupBy,
String having, String sortOrder, String limit) {
+ return query(db, projectionIn, selection, selectionArgs,
+ groupBy, having, sortOrder, limit, null);
+ }
+
+ /**
+ * Perform a query by combining all current settings and the
+ * information passed into this method.
+ *
+ * @param db the database to query on
+ * @param projectionIn A list of which columns to return. Passing
+ * null will return all columns, which is discouraged to prevent
+ * reading data from storage that isn't going to be used.
+ * @param selection A filter declaring which rows to return,
+ * formatted as an SQL WHERE clause (excluding the WHERE
+ * itself). Passing null will return all rows for the given URL.
+ * @param selectionArgs You may include ?s in selection, which
+ * will be replaced by the values from selectionArgs, in order
+ * that they appear in the selection. The values will be bound
+ * as Strings.
+ * @param groupBy A filter declaring how to group rows, formatted
+ * as an SQL GROUP BY clause (excluding the GROUP BY
+ * itself). Passing null will cause the rows to not be grouped.
+ * @param having A filter declare which row groups to include in
+ * the cursor, if row grouping is being used, formatted as an
+ * SQL HAVING clause (excluding the HAVING itself). Passing
+ * null will cause all row groups to be included, and is
+ * required when row grouping is not being used.
+ * @param sortOrder How to order the rows, formatted as an SQL
+ * ORDER BY clause (excluding the ORDER BY itself). Passing null
+ * will use the default sort order, which may be unordered.
+ * @param limit Limits the number of rows returned by the query,
+ * formatted as LIMIT clause. Passing null denotes no LIMIT clause.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
+ * If the operation is canceled, then {@link OperationCanceledException} will be thrown
+ * when the query is executed.
+ * @return a cursor over the result set
+ * @see android.content.ContentResolver#query(android.net.Uri, String[],
+ * String, String[], String)
+ */
+ public Cursor query(SQLiteDatabase db, String[] projectionIn,
+ String selection, String[] selectionArgs, String groupBy,
+ String having, String sortOrder, String limit, CancelationSignal cancelationSignal) {
if (mTables == null) {
return null;
}
@@ -341,7 +386,8 @@
// in both the wrapped and original forms.
String sqlForValidation = buildQuery(projectionIn, "(" + selection + ")", groupBy,
having, sortOrder, limit);
- validateQuerySql(db, sqlForValidation); // will throw if query is invalid
+ validateQuerySql(db, sqlForValidation,
+ cancelationSignal); // will throw if query is invalid
}
String sql = buildQuery(
@@ -353,16 +399,18 @@
}
return db.rawQueryWithFactory(
mFactory, sql, selectionArgs,
- SQLiteDatabase.findEditTable(mTables)); // will throw if query is invalid
+ SQLiteDatabase.findEditTable(mTables),
+ cancelationSignal); // will throw if query is invalid
}
/**
* Verifies that a SQL SELECT statement is valid by compiling it.
* If the SQL statement is not valid, this method will throw a {@link SQLiteException}.
*/
- private void validateQuerySql(SQLiteDatabase db, String sql) {
+ private void validateQuerySql(SQLiteDatabase db, String sql,
+ CancelationSignal cancelationSignal) {
db.getThreadSession().prepare(sql,
- db.getThreadDefaultConnectionFlags(true /*readOnly*/), null);
+ db.getThreadDefaultConnectionFlags(true /*readOnly*/), cancelationSignal, null);
}
/**
diff --git a/core/java/android/database/sqlite/SQLiteSession.java b/core/java/android/database/sqlite/SQLiteSession.java
index a933051..b5a3e31 100644
--- a/core/java/android/database/sqlite/SQLiteSession.java
+++ b/core/java/android/database/sqlite/SQLiteSession.java
@@ -16,6 +16,8 @@
package android.database.sqlite;
+import android.content.CancelationSignal;
+import android.content.OperationCanceledException;
import android.database.CursorWindow;
import android.database.DatabaseUtils;
import android.os.ParcelFileDescriptor;
@@ -156,8 +158,6 @@
* triggers may call custom SQLite functions that perform additional queries.
* </p>
*
- * TODO: Support timeouts on all possibly blocking operations.
- *
* @hide
*/
public final class SQLiteSession {
@@ -280,24 +280,34 @@
* @param transactionListener The transaction listener, or null if none.
* @param connectionFlags The connection flags to use if a connection must be
* acquired by this operation. Refer to {@link SQLiteConnectionPool}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
*
* @throws IllegalStateException if {@link #setTransactionSuccessful} has already been
* called for the current transaction.
+ * @throws SQLiteException if an error occurs.
+ * @throws OperationCanceledException if the operation was canceled.
*
* @see #setTransactionSuccessful
* @see #yieldTransaction
* @see #endTransaction
*/
public void beginTransaction(int transactionMode,
- SQLiteTransactionListener transactionListener, int connectionFlags) {
+ SQLiteTransactionListener transactionListener, int connectionFlags,
+ CancelationSignal cancelationSignal) {
throwIfTransactionMarkedSuccessful();
- beginTransactionUnchecked(transactionMode, transactionListener, connectionFlags);
+ beginTransactionUnchecked(transactionMode, transactionListener, connectionFlags,
+ cancelationSignal);
}
private void beginTransactionUnchecked(int transactionMode,
- SQLiteTransactionListener transactionListener, int connectionFlags) {
+ SQLiteTransactionListener transactionListener, int connectionFlags,
+ CancelationSignal cancelationSignal) {
+ if (cancelationSignal != null) {
+ cancelationSignal.throwIfCanceled();
+ }
+
if (mTransactionStack == null) {
- acquireConnection(null, connectionFlags); // might throw
+ acquireConnection(null, connectionFlags, cancelationSignal); // might throw
}
try {
// Set up the transaction such that we can back out safely
@@ -306,13 +316,15 @@
// Execute SQL might throw a runtime exception.
switch (transactionMode) {
case TRANSACTION_MODE_IMMEDIATE:
- mConnection.execute("BEGIN IMMEDIATE;", null); // might throw
+ mConnection.execute("BEGIN IMMEDIATE;", null,
+ cancelationSignal); // might throw
break;
case TRANSACTION_MODE_EXCLUSIVE:
- mConnection.execute("BEGIN EXCLUSIVE;", null); // might throw
+ mConnection.execute("BEGIN EXCLUSIVE;", null,
+ cancelationSignal); // might throw
break;
default:
- mConnection.execute("BEGIN;", null); // might throw
+ mConnection.execute("BEGIN;", null, cancelationSignal); // might throw
break;
}
}
@@ -323,7 +335,7 @@
transactionListener.onBegin(); // might throw
} catch (RuntimeException ex) {
if (mTransactionStack == null) {
- mConnection.execute("ROLLBACK;", null); // might throw
+ mConnection.execute("ROLLBACK;", null, cancelationSignal); // might throw
}
throw ex;
}
@@ -372,20 +384,28 @@
* This method must be called exactly once for each call to {@link #beginTransaction}.
* </p>
*
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
+ *
* @throws IllegalStateException if there is no current transaction.
+ * @throws SQLiteException if an error occurs.
+ * @throws OperationCanceledException if the operation was canceled.
*
* @see #beginTransaction
* @see #setTransactionSuccessful
* @see #yieldTransaction
*/
- public void endTransaction() {
+ public void endTransaction(CancelationSignal cancelationSignal) {
throwIfNoTransaction();
assert mConnection != null;
- endTransactionUnchecked();
+ endTransactionUnchecked(cancelationSignal);
}
- private void endTransactionUnchecked() {
+ private void endTransactionUnchecked(CancelationSignal cancelationSignal) {
+ if (cancelationSignal != null) {
+ cancelationSignal.throwIfCanceled();
+ }
+
final Transaction top = mTransactionStack;
boolean successful = top.mMarkedSuccessful && !top.mChildFailed;
@@ -414,9 +434,9 @@
} else {
try {
if (successful) {
- mConnection.execute("COMMIT;", null); // might throw
+ mConnection.execute("COMMIT;", null, cancelationSignal); // might throw
} else {
- mConnection.execute("ROLLBACK;", null); // might throw
+ mConnection.execute("ROLLBACK;", null, cancelationSignal); // might throw
}
} finally {
releaseConnection(); // might throw
@@ -467,16 +487,20 @@
* @param throwIfUnsafe If true, then instead of returning false when no
* transaction is in progress, a nested transaction is in progress, or when
* the transaction has already been marked successful, throws {@link IllegalStateException}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return True if the transaction was actually yielded.
*
* @throws IllegalStateException if <code>throwIfNested</code> is true and
* there is no current transaction, there is a nested transaction in progress or
* if {@link #setTransactionSuccessful} has already been called for the current transaction.
+ * @throws SQLiteException if an error occurs.
+ * @throws OperationCanceledException if the operation was canceled.
*
* @see #beginTransaction
* @see #endTransaction
*/
- public boolean yieldTransaction(long sleepAfterYieldDelayMillis, boolean throwIfUnsafe) {
+ public boolean yieldTransaction(long sleepAfterYieldDelayMillis, boolean throwIfUnsafe,
+ CancelationSignal cancelationSignal) {
if (throwIfUnsafe) {
throwIfNoTransaction();
throwIfTransactionMarkedSuccessful();
@@ -493,10 +517,16 @@
return false;
}
- return yieldTransactionUnchecked(sleepAfterYieldDelayMillis); // might throw
+ return yieldTransactionUnchecked(sleepAfterYieldDelayMillis,
+ cancelationSignal); // might throw
}
- private boolean yieldTransactionUnchecked(long sleepAfterYieldDelayMillis) {
+ private boolean yieldTransactionUnchecked(long sleepAfterYieldDelayMillis,
+ CancelationSignal cancelationSignal) {
+ if (cancelationSignal != null) {
+ cancelationSignal.throwIfCanceled();
+ }
+
if (!mConnectionPool.shouldYieldConnection(mConnection, mConnectionFlags)) {
return false;
}
@@ -504,7 +534,7 @@
final int transactionMode = mTransactionStack.mMode;
final SQLiteTransactionListener listener = mTransactionStack.mListener;
final int connectionFlags = mConnectionFlags;
- endTransactionUnchecked(); // might throw
+ endTransactionUnchecked(cancelationSignal); // might throw
if (sleepAfterYieldDelayMillis > 0) {
try {
@@ -514,7 +544,8 @@
}
}
- beginTransactionUnchecked(transactionMode, listener, connectionFlags); // might throw
+ beginTransactionUnchecked(transactionMode, listener, connectionFlags,
+ cancelationSignal); // might throw
return true;
}
@@ -535,17 +566,24 @@
* @param sql The SQL statement to prepare.
* @param connectionFlags The connection flags to use if a connection must be
* acquired by this operation. Refer to {@link SQLiteConnectionPool}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @param outStatementInfo The {@link SQLiteStatementInfo} object to populate
* with information about the statement, or null if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public void prepare(String sql, int connectionFlags, SQLiteStatementInfo outStatementInfo) {
+ public void prepare(String sql, int connectionFlags, CancelationSignal cancelationSignal,
+ SQLiteStatementInfo outStatementInfo) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
- acquireConnection(sql, connectionFlags); // might throw
+ if (cancelationSignal != null) {
+ cancelationSignal.throwIfCanceled();
+ }
+
+ acquireConnection(sql, connectionFlags, cancelationSignal); // might throw
try {
mConnection.prepare(sql, outStatementInfo); // might throw
} finally {
@@ -560,22 +598,25 @@
* @param bindArgs The arguments to bind, or null if none.
* @param connectionFlags The connection flags to use if a connection must be
* acquired by this operation. Refer to {@link SQLiteConnectionPool}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public void execute(String sql, Object[] bindArgs, int connectionFlags) {
+ public void execute(String sql, Object[] bindArgs, int connectionFlags,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
- if (executeSpecial(sql, bindArgs, connectionFlags)) {
+ if (executeSpecial(sql, bindArgs, connectionFlags, cancelationSignal)) {
return;
}
- acquireConnection(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags, cancelationSignal); // might throw
try {
- mConnection.execute(sql, bindArgs); // might throw
+ mConnection.execute(sql, bindArgs, cancelationSignal); // might throw
} finally {
releaseConnection(); // might throw
}
@@ -588,24 +629,27 @@
* @param bindArgs The arguments to bind, or null if none.
* @param connectionFlags The connection flags to use if a connection must be
* acquired by this operation. Refer to {@link SQLiteConnectionPool}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The value of the first column in the first row of the result set
* as a <code>long</code>, or zero if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public long executeForLong(String sql, Object[] bindArgs, int connectionFlags) {
+ public long executeForLong(String sql, Object[] bindArgs, int connectionFlags,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
- if (executeSpecial(sql, bindArgs, connectionFlags)) {
+ if (executeSpecial(sql, bindArgs, connectionFlags, cancelationSignal)) {
return 0;
}
- acquireConnection(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags, cancelationSignal); // might throw
try {
- return mConnection.executeForLong(sql, bindArgs); // might throw
+ return mConnection.executeForLong(sql, bindArgs, cancelationSignal); // might throw
} finally {
releaseConnection(); // might throw
}
@@ -618,24 +662,27 @@
* @param bindArgs The arguments to bind, or null if none.
* @param connectionFlags The connection flags to use if a connection must be
* acquired by this operation. Refer to {@link SQLiteConnectionPool}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The value of the first column in the first row of the result set
* as a <code>String</code>, or null if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public String executeForString(String sql, Object[] bindArgs, int connectionFlags) {
+ public String executeForString(String sql, Object[] bindArgs, int connectionFlags,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
- if (executeSpecial(sql, bindArgs, connectionFlags)) {
+ if (executeSpecial(sql, bindArgs, connectionFlags, cancelationSignal)) {
return null;
}
- acquireConnection(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags, cancelationSignal); // might throw
try {
- return mConnection.executeForString(sql, bindArgs); // might throw
+ return mConnection.executeForString(sql, bindArgs, cancelationSignal); // might throw
} finally {
releaseConnection(); // might throw
}
@@ -649,26 +696,29 @@
* @param bindArgs The arguments to bind, or null if none.
* @param connectionFlags The connection flags to use if a connection must be
* acquired by this operation. Refer to {@link SQLiteConnectionPool}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The file descriptor for a shared memory region that contains
* the value of the first column in the first row of the result set as a BLOB,
* or null if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
public ParcelFileDescriptor executeForBlobFileDescriptor(String sql, Object[] bindArgs,
- int connectionFlags) {
+ int connectionFlags, CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
- if (executeSpecial(sql, bindArgs, connectionFlags)) {
+ if (executeSpecial(sql, bindArgs, connectionFlags, cancelationSignal)) {
return null;
}
- acquireConnection(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags, cancelationSignal); // might throw
try {
- return mConnection.executeForBlobFileDescriptor(sql, bindArgs); // might throw
+ return mConnection.executeForBlobFileDescriptor(sql, bindArgs,
+ cancelationSignal); // might throw
} finally {
releaseConnection(); // might throw
}
@@ -682,23 +732,27 @@
* @param bindArgs The arguments to bind, or null if none.
* @param connectionFlags The connection flags to use if a connection must be
* acquired by this operation. Refer to {@link SQLiteConnectionPool}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The number of rows that were changed.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public int executeForChangedRowCount(String sql, Object[] bindArgs, int connectionFlags) {
+ public int executeForChangedRowCount(String sql, Object[] bindArgs, int connectionFlags,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
- if (executeSpecial(sql, bindArgs, connectionFlags)) {
+ if (executeSpecial(sql, bindArgs, connectionFlags, cancelationSignal)) {
return 0;
}
- acquireConnection(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags, cancelationSignal); // might throw
try {
- return mConnection.executeForChangedRowCount(sql, bindArgs); // might throw
+ return mConnection.executeForChangedRowCount(sql, bindArgs,
+ cancelationSignal); // might throw
} finally {
releaseConnection(); // might throw
}
@@ -712,23 +766,27 @@
* @param bindArgs The arguments to bind, or null if none.
* @param connectionFlags The connection flags to use if a connection must be
* acquired by this operation. Refer to {@link SQLiteConnectionPool}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The row id of the last row that was inserted, or 0 if none.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- public long executeForLastInsertedRowId(String sql, Object[] bindArgs, int connectionFlags) {
+ public long executeForLastInsertedRowId(String sql, Object[] bindArgs, int connectionFlags,
+ CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
- if (executeSpecial(sql, bindArgs, connectionFlags)) {
+ if (executeSpecial(sql, bindArgs, connectionFlags, cancelationSignal)) {
return 0;
}
- acquireConnection(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags, cancelationSignal); // might throw
try {
- return mConnection.executeForLastInsertedRowId(sql, bindArgs); // might throw
+ return mConnection.executeForLastInsertedRowId(sql, bindArgs,
+ cancelationSignal); // might throw
} finally {
releaseConnection(); // might throw
}
@@ -750,15 +808,17 @@
* regagless of whether they fit in the window.
* @param connectionFlags The connection flags to use if a connection must be
* acquired by this operation. Refer to {@link SQLiteConnectionPool}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return The number of rows that were counted during query execution. Might
* not be all rows in the result set unless <code>countAllRows</code> is true.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
public int executeForCursorWindow(String sql, Object[] bindArgs,
CursorWindow window, int startPos, int requiredPos, boolean countAllRows,
- int connectionFlags) {
+ int connectionFlags, CancelationSignal cancelationSignal) {
if (sql == null) {
throw new IllegalArgumentException("sql must not be null.");
}
@@ -766,15 +826,16 @@
throw new IllegalArgumentException("window must not be null.");
}
- if (executeSpecial(sql, bindArgs, connectionFlags)) {
+ if (executeSpecial(sql, bindArgs, connectionFlags, cancelationSignal)) {
window.clear();
return 0;
}
- acquireConnection(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags, cancelationSignal); // might throw
try {
return mConnection.executeForCursorWindow(sql, bindArgs,
- window, startPos, requiredPos, countAllRows); // might throw
+ window, startPos, requiredPos, countAllRows,
+ cancelationSignal); // might throw
} finally {
releaseConnection(); // might throw
}
@@ -793,35 +854,45 @@
* @param bindArgs The arguments to bind, or null if none.
* @param connectionFlags The connection flags to use if a connection must be
* acquired by this operation. Refer to {@link SQLiteConnectionPool}.
+ * @param cancelationSignal A signal to cancel the operation in progress, or null if none.
* @return True if the statement was of a special form that was handled here,
* false otherwise.
*
* @throws SQLiteException if an error occurs, such as a syntax error
* or invalid number of bind arguments.
+ * @throws OperationCanceledException if the operation was canceled.
*/
- private boolean executeSpecial(String sql, Object[] bindArgs, int connectionFlags) {
+ private boolean executeSpecial(String sql, Object[] bindArgs, int connectionFlags,
+ CancelationSignal cancelationSignal) {
+ if (cancelationSignal != null) {
+ cancelationSignal.throwIfCanceled();
+ }
+
final int type = DatabaseUtils.getSqlStatementType(sql);
switch (type) {
case DatabaseUtils.STATEMENT_BEGIN:
- beginTransaction(TRANSACTION_MODE_EXCLUSIVE, null, connectionFlags);
+ beginTransaction(TRANSACTION_MODE_EXCLUSIVE, null, connectionFlags,
+ cancelationSignal);
return true;
case DatabaseUtils.STATEMENT_COMMIT:
setTransactionSuccessful();
- endTransaction();
+ endTransaction(cancelationSignal);
return true;
case DatabaseUtils.STATEMENT_ABORT:
- endTransaction();
+ endTransaction(cancelationSignal);
return true;
}
return false;
}
- private void acquireConnection(String sql, int connectionFlags) {
+ private void acquireConnection(String sql, int connectionFlags,
+ CancelationSignal cancelationSignal) {
if (mConnection == null) {
assert mConnectionUseCount == 0;
- mConnection = mConnectionPool.acquireConnection(sql, connectionFlags); // might throw
+ mConnection = mConnectionPool.acquireConnection(sql, connectionFlags,
+ cancelationSignal); // might throw
mConnectionFlags = connectionFlags;
}
mConnectionUseCount += 1;
diff --git a/core/java/android/database/sqlite/SQLiteStatement.java b/core/java/android/database/sqlite/SQLiteStatement.java
index 4e20da0..b1092d76 100644
--- a/core/java/android/database/sqlite/SQLiteStatement.java
+++ b/core/java/android/database/sqlite/SQLiteStatement.java
@@ -28,7 +28,7 @@
*/
public final class SQLiteStatement extends SQLiteProgram {
SQLiteStatement(SQLiteDatabase db, String sql, Object[] bindArgs) {
- super(db, sql, bindArgs);
+ super(db, sql, bindArgs, null);
}
/**
@@ -41,7 +41,7 @@
public void execute() {
acquireReference();
try {
- getSession().execute(getSql(), getBindArgs(), getConnectionFlags());
+ getSession().execute(getSql(), getBindArgs(), getConnectionFlags(), null);
} catch (SQLiteDatabaseCorruptException ex) {
onCorruption();
throw ex;
@@ -62,7 +62,7 @@
acquireReference();
try {
return getSession().executeForChangedRowCount(
- getSql(), getBindArgs(), getConnectionFlags());
+ getSql(), getBindArgs(), getConnectionFlags(), null);
} catch (SQLiteDatabaseCorruptException ex) {
onCorruption();
throw ex;
@@ -84,7 +84,7 @@
acquireReference();
try {
return getSession().executeForLastInsertedRowId(
- getSql(), getBindArgs(), getConnectionFlags());
+ getSql(), getBindArgs(), getConnectionFlags(), null);
} catch (SQLiteDatabaseCorruptException ex) {
onCorruption();
throw ex;
@@ -105,7 +105,7 @@
acquireReference();
try {
return getSession().executeForLong(
- getSql(), getBindArgs(), getConnectionFlags());
+ getSql(), getBindArgs(), getConnectionFlags(), null);
} catch (SQLiteDatabaseCorruptException ex) {
onCorruption();
throw ex;
@@ -126,7 +126,7 @@
acquireReference();
try {
return getSession().executeForString(
- getSql(), getBindArgs(), getConnectionFlags());
+ getSql(), getBindArgs(), getConnectionFlags(), null);
} catch (SQLiteDatabaseCorruptException ex) {
onCorruption();
throw ex;
@@ -147,7 +147,7 @@
acquireReference();
try {
return getSession().executeForBlobFileDescriptor(
- getSql(), getBindArgs(), getConnectionFlags());
+ getSql(), getBindArgs(), getConnectionFlags(), null);
} catch (SQLiteDatabaseCorruptException ex) {
onCorruption();
throw ex;
diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl
index d2afbb9..61bc324 100644
--- a/core/java/android/nfc/INfcAdapter.aidl
+++ b/core/java/android/nfc/INfcAdapter.aidl
@@ -44,5 +44,5 @@
in IntentFilter[] filters, in TechListParcel techLists);
void setForegroundNdefPush(in NdefMessage msg, in INdefPushCallback callback);
- void dispatch(in Tag tag, in NdefMessage message);
+ void dispatch(in Tag tag);
}
diff --git a/core/java/android/nfc/NdefMessage.java b/core/java/android/nfc/NdefMessage.java
index c83144f..5df9272 100644
--- a/core/java/android/nfc/NdefMessage.java
+++ b/core/java/android/nfc/NdefMessage.java
@@ -158,7 +158,28 @@
}
/**
- * Return this NDEF MEssage as raw bytes.<p>
+ * Return the length of this NDEF Message if it is written to a byte array
+ * with {@link #toByteArray}.<p>
+ * An NDEF Message can be formatted to bytes in different ways
+ * depending on chunking, SR, and ID flags, so the length returned
+ * by this method may not be equal to the length of the original
+ * byte array used to construct this NDEF Message. However it will
+ * always be equal to the length of the byte array produced by
+ * {@link #toByteArray}.
+ *
+ * @return length of this NDEF Message when written to bytes with {@link #toByteArray}
+ * @see #toByteArray
+ */
+ public int getByteArrayLength() {
+ int length = 0;
+ for (NdefRecord r : mRecords) {
+ length += r.getByteLength();
+ }
+ return length;
+ }
+
+ /**
+ * Return this NDEF Message as raw bytes.<p>
* The NDEF Message is formatted as per the NDEF 1.0 specification,
* and the byte array is suitable for network transmission or storage
* in an NFC Forum NDEF compatible tag.<p>
@@ -166,13 +187,10 @@
* short record (SR) format and omit the identifier field when possible.
*
* @return NDEF Message in binary format
+ * @see getByteArrayLength
*/
public byte[] toByteArray() {
- int length = 0;
- for (NdefRecord r : mRecords) {
- length += r.getByteLength();
- }
-
+ int length = getByteArrayLength();
ByteBuffer buffer = ByteBuffer.allocate(length);
for (int i=0; i<mRecords.length; i++) {
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 224a8bc..5176857 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -889,12 +889,12 @@
* {@link android.Manifest.permission#WRITE_SECURE_SETTINGS} permission.
* @hide
*/
- public void dispatch(Tag tag, NdefMessage message) {
+ public void dispatch(Tag tag) {
if (tag == null) {
throw new NullPointerException("tag cannot be null");
}
try {
- sService.dispatch(tag, message);
+ sService.dispatch(tag);
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
}
diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java
index 9fe0bed..f9b765cb 100644
--- a/core/java/android/nfc/Tag.java
+++ b/core/java/android/nfc/Tag.java
@@ -108,14 +108,14 @@
* <p>
*/
public final class Tag implements Parcelable {
- /*package*/ final byte[] mId;
- /*package*/ final int[] mTechList;
- /*package*/ final String[] mTechStringList;
- /*package*/ final Bundle[] mTechExtras;
- /*package*/ final int mServiceHandle; // for use by NFC service, 0 indicates a mock
- /*package*/ final INfcTag mTagService; // interface to NFC service, will be null if mock tag
+ final byte[] mId;
+ final int[] mTechList;
+ final String[] mTechStringList;
+ final Bundle[] mTechExtras;
+ final int mServiceHandle; // for use by NFC service, 0 indicates a mock
+ final INfcTag mTagService; // interface to NFC service, will be null if mock tag
- /*package*/ int mConnectedTechnology;
+ int mConnectedTechnology;
/**
* Hidden constructor to be used by NFC service and internal classes.
diff --git a/core/java/android/nfc/tech/BasicTagTechnology.java b/core/java/android/nfc/tech/BasicTagTechnology.java
index 913ae0e..b6b347c 100644
--- a/core/java/android/nfc/tech/BasicTagTechnology.java
+++ b/core/java/android/nfc/tech/BasicTagTechnology.java
@@ -18,7 +18,6 @@
import android.nfc.ErrorCodes;
import android.nfc.Tag;
-import android.nfc.TagLostException;
import android.nfc.TransceiveResult;
import android.os.RemoteException;
import android.util.Log;
@@ -28,12 +27,13 @@
/**
* A base class for tag technologies that are built on top of transceive().
*/
-/* package */ abstract class BasicTagTechnology implements TagTechnology {
+abstract class BasicTagTechnology implements TagTechnology {
private static final String TAG = "NFC";
- /*package*/ final Tag mTag;
- /*package*/ boolean mIsConnected;
- /*package*/ int mSelectedTechnology;
+ final Tag mTag;
+
+ boolean mIsConnected;
+ int mSelectedTechnology;
BasicTagTechnology(Tag tag, int tech) throws RemoteException {
mTag = tag;
@@ -139,7 +139,7 @@
}
}
/** Internal transceive */
- /*package*/ byte[] transceive(byte[] data, boolean raw) throws IOException {
+ byte[] transceive(byte[] data, boolean raw) throws IOException {
checkConnected();
try {
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index ef8cb16..f14d27e 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -747,7 +747,7 @@
Cursor c = null;
try {
c = cp.query(mUri, SELECT_VALUE, NAME_EQ_PLACEHOLDER,
- new String[]{name}, null);
+ new String[]{name}, null, null);
if (c == null) {
Log.w(TAG, "Can't get key " + name + " from " + mUri);
return null;
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index b255c57..cc8eef2 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -129,12 +129,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.microedition.khronos.egl.EGL10;
-import javax.microedition.khronos.egl.EGLContext;
-import javax.microedition.khronos.egl.EGLDisplay;
-
-import static javax.microedition.khronos.egl.EGL10.EGL_DEFAULT_DISPLAY;
-
/**
* <p>A View that displays web pages. This class is the basis upon which you
* can roll your own web browser or simply display some online content within your Activity.
@@ -1069,9 +1063,6 @@
private Rect mScrollingLayerBounds = new Rect();
private boolean mSentAutoScrollMessage = false;
- // Temporary hack to work around the context removal upon memory pressure
- private static boolean mIncrementEGLContextHack = false;
-
// used for serializing asynchronously handled touch events.
private final TouchEventQueue mTouchEventQueue = new TouchEventQueue();
@@ -4478,13 +4469,6 @@
}
if (canvas.isHardwareAccelerated()) {
- if (mIncrementEGLContextHack == false) {
- mIncrementEGLContextHack = true;
- EGL10 egl = (EGL10) EGLContext.getEGL();
- EGLDisplay eglDisplay = egl.eglGetDisplay(EGL_DEFAULT_DISPLAY);
- int[] version = new int[2];
- egl.eglInitialize(eglDisplay, version);
- }
mZoomManager.setHardwareAccelerated();
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 39a4f42..40d8a77 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -8402,6 +8402,9 @@
boolean selectAllGotFocus = mSelectAllOnFocus && didTouchFocusSelect();
hideControllers();
if (!selectAllGotFocus && mText.length() > 0) {
+ // Move cursor
+ final int offset = getOffsetForPosition(event.getX(), event.getY());
+ Selection.setSelection((Spannable) mText, offset);
if (mSpellChecker != null) {
// When the cursor moves, the word that was typed may need spell check
mSpellChecker.onSelectionChanged();
@@ -8418,9 +8421,6 @@
postDelayed(mShowSuggestionRunnable,
ViewConfiguration.getDoubleTapTimeout());
} else if (hasInsertionController()) {
- // Move cursor
- final int offset = getOffsetForPosition(event.getX(), event.getY());
- Selection.setSelection((Spannable) mText, offset);
getInsertionController().show();
}
}
@@ -9754,11 +9754,12 @@
public void show() {
if (!(mText instanceof Editable)) return;
- updateSuggestions();
- mCursorWasVisibleBeforeSuggestions = mCursorVisible;
- setCursorVisible(false);
- mIsShowingUp = true;
- super.show();
+ if (updateSuggestions()) {
+ mCursorWasVisibleBeforeSuggestions = mCursorVisible;
+ setCursorVisible(false);
+ mIsShowingUp = true;
+ super.show();
+ }
}
@Override
@@ -9814,11 +9815,13 @@
super.hide();
}
- private void updateSuggestions() {
+ private boolean updateSuggestions() {
Spannable spannable = (Spannable) TextView.this.mText;
SuggestionSpan[] suggestionSpans = getSuggestionSpans();
final int nbSpans = suggestionSpans.length;
+ // Suggestions are shown after a delay: the underlying spans may have been removed
+ if (nbSpans == 0) return false;
mNumberOfSuggestions = 0;
int spanUnionStart = mText.length();
@@ -9921,6 +9924,7 @@
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mSuggestionsAdapter.notifyDataSetChanged();
+ return true;
}
private void highlightTextDifferences(SuggestionInfo suggestionInfo, int unionStart,
diff --git a/core/java/com/android/internal/widget/DigitalClock.java b/core/java/com/android/internal/widget/DigitalClock.java
index daefc9a..af3fd42 100644
--- a/core/java/com/android/internal/widget/DigitalClock.java
+++ b/core/java/com/android/internal/widget/DigitalClock.java
@@ -228,7 +228,7 @@
updateTime();
}
- private void updateTime() {
+ public void updateTime() {
mCalendar.setTimeInMillis(System.currentTimeMillis());
CharSequence newTime = DateFormat.format(mFormat, mCalendar);
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index c8b725a..23ee8f8 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -757,20 +757,11 @@
int start, int count, int contextCount,
jfloat x, jfloat y, int flags, SkPaint* paint) {
- sp<TextLayoutCacheValue> value;
-#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, textArray, start, count,
- contextCount, flags);
+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
+ textArray, start, count, contextCount, flags);
if (value == NULL) {
- ALOGE("Cannot get TextLayoutCache value for text = '%s'",
- String8(textArray + start, count).string());
- return ;
+ return;
}
-#else
- value = new TextLayoutCacheValue(contextCount);
- TextLayoutEngine::getInstance().computeValues(value.get(), paint,
- reinterpret_cast<const UChar*>(textArray), start, count, contextCount, flags);
-#endif
doDrawGlyphs(canvas, value->getGlyphs(), 0, value->getGlyphsCount(), x, y, flags, paint);
}
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 9bcfa5f..376c841 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -465,11 +465,10 @@
jchar* glyphsArray = env->GetCharArrayElements(glyphs, NULL);
- TextLayoutCacheValue value(contextCount);
- TextLayoutEngine::getInstance().computeValues(&value, paint, text, start, count,
- contextCount, flags);
- const jchar* shapedGlyphs = value.getGlyphs();
- size_t glyphsCount = value.getGlyphsCount();
+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
+ text, start, count, contextCount, flags);
+ const jchar* shapedGlyphs = value->getGlyphs();
+ size_t glyphsCount = value->getGlyphsCount();
memcpy(glyphsArray, shapedGlyphs, sizeof(jchar) * glyphsCount);
env->ReleaseCharArrayElements(glyphs, glyphsArray, JNI_ABORT);
@@ -677,20 +676,11 @@
static int breakText(JNIEnv* env, SkPaint& paint, const jchar text[],
int count, float maxWidth, jfloatArray jmeasured,
SkPaint::TextBufferDirection tbd) {
- sp<TextLayoutCacheValue> value;
-#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(&paint, text, 0, count,
- count, paint.getFlags());
+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(&paint,
+ text, 0, count, count, paint.getFlags());
if (value == NULL) {
- ALOGE("Cannot get TextLayoutCache value for text = '%s'",
- String8(text, count).string());
+ return 0;
}
-#else
- value = new TextLayoutCacheValue(count);
- TextLayoutEngine::getInstance().computeValues(value.get(), &paint,
- reinterpret_cast<const UChar*>(text), 0, count, count, paint.getFlags());
-#endif
-
SkScalar measured;
size_t bytes = paint.breakText(value->getGlyphs(), value->getGlyphsCount() << 1,
SkFloatToScalar(maxWidth), &measured, tbd);
@@ -756,19 +746,11 @@
SkRect r;
SkIRect ir;
- sp<TextLayoutCacheValue> value;
-#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(&paint, text, 0, count,
- count, paint.getFlags());
+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(&paint,
+ text, 0, count, count, paint.getFlags());
if (value == NULL) {
- ALOGE("Cannot get TextLayoutCache value for text = '%s'",
- String8(text, count).string());
+ return;
}
-#else
- value = new TextLayoutCacheValue(count);
- TextLayoutEngine::getInstance().computeValues(value.get(), &paint,
- reinterpret_cast<const UChar*>(text), 0, count, count, paint.getFlags());
-#endif
paint.measureText(value->getGlyphs(), value->getGlyphsCount() << 1, &r);
r.roundOut(&ir);
GraphicsJNI::irect_to_jrect(ir, env, bounds);
diff --git a/core/jni/android/graphics/TextLayout.cpp b/core/jni/android/graphics/TextLayout.cpp
index 2d83851..2241f60 100644
--- a/core/jni/android/graphics/TextLayout.cpp
+++ b/core/jni/android/graphics/TextLayout.cpp
@@ -53,19 +53,9 @@
// a path representing the text that would have been drawn.
void TextLayout::handleText(SkPaint *paint, const jchar* text, jsize len,
jint bidiFlags, jfloat x, jfloat y, SkPath *path) {
- sp<TextLayoutCacheValue> value;
-#if USE_TEXT_LAYOUT_CACHE
- // Return advances from the cache. Compute them if needed
- value = TextLayoutCache::getInstance().getValue(paint, text, 0, len,
- len, bidiFlags);
-#else
- value = new TextLayoutCacheValue(len);
- TextLayoutEngine::getInstance().computeValues(value.get(), paint,
- reinterpret_cast<const UChar*>(text), 0, len, len, bidiFlags);
-#endif
+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
+ text, 0, len, len, bidiFlags);
if (value == NULL) {
- ALOGE("Cannot get TextLayoutCache value for text = '%s'",
- String8(text, len).string());
return ;
}
SkScalar x_ = SkFloatToScalar(x);
@@ -77,19 +67,9 @@
void TextLayout::getTextRunAdvances(SkPaint* paint, const jchar* chars, jint start,
jint count, jint contextCount, jint dirFlags,
jfloat* resultAdvances, jfloat* resultTotalAdvance) {
- sp<TextLayoutCacheValue> value;
-#if USE_TEXT_LAYOUT_CACHE
- // Return advances from the cache. Compute them if needed
- value = TextLayoutCache::getInstance().getValue(paint, chars, start, count,
- contextCount, dirFlags);
-#else
- value = new TextLayoutCacheValue(contextCount);
- TextLayoutEngine::getInstance().computeValues(value.get(), paint,
- reinterpret_cast<const UChar*>(chars), start, count, contextCount, dirFlags);
-#endif
+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
+ chars, start, count, contextCount, dirFlags);
if (value == NULL) {
- ALOGE("Cannot get TextLayoutCache value for text = '%s'",
- String8(chars + start, count).string());
return ;
}
if (resultAdvances) {
@@ -126,20 +106,12 @@
return;
}
- sp<TextLayoutCacheValue> value;
-#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, text, 0, count,
- count, bidiFlags);
-#else
- value = new TextLayoutCacheValue(count);
- TextLayoutEngine::getInstance().computeValues(value.get(), paint,
- reinterpret_cast<const UChar*>(text), 0, count, count, bidiFlags);
-#endif
+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
+ text, 0, count, count, bidiFlags);
if (value == NULL) {
- ALOGE("Cannot get TextLayoutCache value for text = '%s'",
- String8(text, count).string());
- return ;
+ return;
}
+
// Beware: this needs Glyph encoding (already done on the Paint constructor)
canvas->drawTextOnPathHV(value->getGlyphs(), value->getGlyphsCount() * 2, *path, h_, v_, *paint);
}
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index e0d299b..c797a73 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -35,18 +35,13 @@
#define TYPEFACE_BENGALI "/system/fonts/Lohit-Bengali.ttf"
#define TYPEFACE_THAI "/system/fonts/DroidSansThai.ttf"
-#if USE_TEXT_LAYOUT_CACHE
-
- ANDROID_SINGLETON_STATIC_INSTANCE(TextLayoutCache);
-
-#endif
-
- ANDROID_SINGLETON_STATIC_INSTANCE(TextLayoutEngine);
+ANDROID_SINGLETON_STATIC_INSTANCE(TextLayoutEngine);
//--------------------------------------------------------------------------------------------------
-TextLayoutCache::TextLayoutCache() :
- mCache(GenerationCache<TextLayoutCacheKey, sp<TextLayoutCacheValue> >::kUnlimitedCapacity),
+TextLayoutCache::TextLayoutCache(TextLayoutShaper* shaper) :
+ mShaper(shaper),
+ mCache(GenerationCache<TextLayoutCacheKey, sp<TextLayoutValue> >::kUnlimitedCapacity),
mSize(0), mMaxSize(MB(DEFAULT_TEXT_LAYOUT_CACHE_SIZE_IN_MB)),
mCacheHitCount(0), mNanosecondsSaved(0) {
init();
@@ -75,7 +70,7 @@
/**
* Callbacks
*/
-void TextLayoutCache::operator()(TextLayoutCacheKey& text, sp<TextLayoutCacheValue>& desc) {
+void TextLayoutCache::operator()(TextLayoutCacheKey& text, sp<TextLayoutValue>& desc) {
size_t totalSizeToDelete = text.getSize() + desc->getSize();
mSize -= totalSizeToDelete;
if (mDebugEnabled) {
@@ -93,7 +88,7 @@
/*
* Caching
*/
-sp<TextLayoutCacheValue> TextLayoutCache::getValue(const SkPaint* paint,
+sp<TextLayoutValue> TextLayoutCache::getValue(const SkPaint* paint,
const jchar* text, jint start, jint count, jint contextCount, jint dirFlags) {
AutoMutex _l(mLock);
nsecs_t startTime = 0;
@@ -105,7 +100,7 @@
TextLayoutCacheKey key(paint, text, start, count, contextCount, dirFlags);
// Get value from cache if possible
- sp<TextLayoutCacheValue> value = mCache.get(key);
+ sp<TextLayoutValue> value = mCache.get(key);
// Value not found for the key, we need to add a new value in the cache
if (value == NULL) {
@@ -113,10 +108,10 @@
startTime = systemTime(SYSTEM_TIME_MONOTONIC);
}
- value = new TextLayoutCacheValue(contextCount);
+ value = new TextLayoutValue(contextCount);
// Compute advances and store them
- TextLayoutEngine::getInstance().computeValues(value.get(), paint,
+ mShaper->computeValues(value.get(), paint,
reinterpret_cast<const UChar*>(text), start, count,
size_t(contextCount), int(dirFlags));
@@ -312,31 +307,33 @@
/**
* TextLayoutCacheValue
*/
-TextLayoutCacheValue::TextLayoutCacheValue(size_t contextCount) :
+TextLayoutValue::TextLayoutValue(size_t contextCount) :
mTotalAdvance(0), mElapsedTime(0) {
// Give a hint for advances and glyphs vectors size
mAdvances.setCapacity(contextCount);
mGlyphs.setCapacity(contextCount);
}
-size_t TextLayoutCacheValue::getSize() const {
- return sizeof(TextLayoutCacheValue) + sizeof(jfloat) * mAdvances.capacity() +
+size_t TextLayoutValue::getSize() const {
+ return sizeof(TextLayoutValue) + sizeof(jfloat) * mAdvances.capacity() +
sizeof(jchar) * mGlyphs.capacity();
}
-void TextLayoutCacheValue::setElapsedTime(uint32_t time) {
+void TextLayoutValue::setElapsedTime(uint32_t time) {
mElapsedTime = time;
}
-uint32_t TextLayoutCacheValue::getElapsedTime() {
+uint32_t TextLayoutValue::getElapsedTime() {
return mElapsedTime;
}
-TextLayoutEngine::TextLayoutEngine() : mShaperItemGlyphArraySize(0) {
+TextLayoutShaper::TextLayoutShaper() : mShaperItemGlyphArraySize(0) {
mDefaultTypeface = SkFontHost::CreateTypeface(NULL, NULL, NULL, 0, SkTypeface::kNormal);
mArabicTypeface = NULL;
mHebrewRegularTypeface = NULL;
mHebrewBoldTypeface = NULL;
+ mBengaliTypeface = NULL;
+ mThaiTypeface = NULL;
mFontRec.klass = &harfbuzzSkiaClass;
mFontRec.userData = 0;
@@ -355,12 +352,17 @@
mShaperItem.font->userData = &mShapingPaint;
}
-TextLayoutEngine::~TextLayoutEngine() {
- // FIXME should free fonts and caches but since this class is a singleton,
- // we don't bother at the moment
+TextLayoutShaper::~TextLayoutShaper() {
+ SkSafeUnref(mDefaultTypeface);
+ SkSafeUnref(mArabicTypeface);
+ SkSafeUnref(mHebrewRegularTypeface);
+ SkSafeUnref(mHebrewBoldTypeface);
+ SkSafeUnref(mBengaliTypeface);
+ SkSafeUnref(mThaiTypeface);
+ deleteShaperItemGlyphArrays();
}
-void TextLayoutEngine::computeValues(TextLayoutCacheValue* value, const SkPaint* paint, const UChar* chars,
+void TextLayoutShaper::computeValues(TextLayoutValue* value, const SkPaint* paint, const UChar* chars,
size_t start, size_t count, size_t contextCount, int dirFlags) {
computeValues(paint, chars, start, count, contextCount, dirFlags,
@@ -371,7 +373,7 @@
#endif
}
-void TextLayoutEngine::computeValues(const SkPaint* paint, const UChar* chars,
+void TextLayoutShaper::computeValues(const SkPaint* paint, const UChar* chars,
size_t start, size_t count, size_t contextCount, int dirFlags,
Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
Vector<jchar>* const outGlyphs) {
@@ -513,7 +515,7 @@
}
}
-void TextLayoutEngine::computeRunValues(const SkPaint* paint, const UChar* chars,
+void TextLayoutShaper::computeRunValues(const SkPaint* paint, const UChar* chars,
size_t count, bool isRTL,
Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
Vector<jchar>* const outGlyphs) {
@@ -719,7 +721,7 @@
}
-size_t TextLayoutEngine::shapeFontRun(const SkPaint* paint, bool isRTL) {
+size_t TextLayoutShaper::shapeFontRun(const SkPaint* paint, bool isRTL) {
// Reset kerning
mShaperItem.kerning_applied = false;
@@ -833,14 +835,14 @@
return baseGlyphCount;
}
-void TextLayoutEngine::ensureShaperItemGlyphArrays(size_t size) {
+void TextLayoutShaper::ensureShaperItemGlyphArrays(size_t size) {
if (size > mShaperItemGlyphArraySize) {
deleteShaperItemGlyphArrays();
createShaperItemGlyphArrays(size);
}
}
-void TextLayoutEngine::createShaperItemGlyphArrays(size_t size) {
+void TextLayoutShaper::createShaperItemGlyphArrays(size_t size) {
#if DEBUG_GLYPHS
ALOGD("Creating Glyph Arrays with size = %d", size);
#endif
@@ -858,7 +860,7 @@
mShaperItem.log_clusters = new unsigned short[size];
}
-void TextLayoutEngine::deleteShaperItemGlyphArrays() {
+void TextLayoutShaper::deleteShaperItemGlyphArrays() {
delete[] mShaperItem.glyphs;
delete[] mShaperItem.attributes;
delete[] mShaperItem.advances;
@@ -866,7 +868,7 @@
delete[] mShaperItem.log_clusters;
}
-SkTypeface* TextLayoutEngine::getCachedTypeface(SkTypeface** typeface, const char path[]) {
+SkTypeface* TextLayoutShaper::getCachedTypeface(SkTypeface** typeface, const char path[]) {
if (!*typeface) {
*typeface = SkTypeface::CreateFromFile(path);
// CreateFromFile(path) can return NULL if the path is non existing
@@ -884,7 +886,7 @@
return *typeface;
}
-HB_Face TextLayoutEngine::getCachedHBFace(SkTypeface* typeface) {
+HB_Face TextLayoutShaper::getCachedHBFace(SkTypeface* typeface) {
SkFontID fontId = typeface->uniqueID();
ssize_t index = mCachedHBFaces.indexOfKey(fontId);
if (index >= 0) {
@@ -900,4 +902,36 @@
return face;
}
+TextLayoutEngine::TextLayoutEngine() {
+ mShaper = new TextLayoutShaper();
+#if USE_TEXT_LAYOUT_CACHE
+ mTextLayoutCache = new TextLayoutCache(mShaper);
+#else
+ mTextLayoutCache = NULL;
+#endif
+}
+
+TextLayoutEngine::~TextLayoutEngine() {
+ delete mTextLayoutCache;
+ delete mShaper;
+}
+
+sp<TextLayoutValue> TextLayoutEngine::getValue(const SkPaint* paint, const jchar* text,
+ jint start, jint count, jint contextCount, jint dirFlags) {
+ sp<TextLayoutValue> value;
+#if USE_TEXT_LAYOUT_CACHE
+ value = mTextLayoutCache->getValue(paint, text, start, count,
+ contextCount, dirFlags);
+ if (value == NULL) {
+ ALOGE("Cannot get TextLayoutCache value for text = '%s'",
+ String8(text + start, count).string());
+ }
+#else
+ value = new TextLayoutValue(count);
+ mShaper->computeValues(value.get(), paint,
+ reinterpret_cast<const UChar*>(text), start, count, contextCount, dirFlags);
+#endif
+ return value;
+}
+
} // namespace android
diff --git a/core/jni/android/graphics/TextLayoutCache.h b/core/jni/android/graphics/TextLayoutCache.h
index 956e8ca..7ac2f18 100644
--- a/core/jni/android/graphics/TextLayoutCache.h
+++ b/core/jni/android/graphics/TextLayoutCache.h
@@ -115,11 +115,11 @@
}
/*
- * TextLayoutCacheValue is the Cache value
+ * TextLayoutValue is the Cache value
*/
-class TextLayoutCacheValue : public RefBase {
+class TextLayoutValue : public RefBase {
public:
- TextLayoutCacheValue(size_t contextCount);
+ TextLayoutValue(size_t contextCount);
void setElapsedTime(uint32_t time);
uint32_t getElapsedTime();
@@ -159,72 +159,14 @@
}; // TextLayoutCacheValue
/**
- * Cache of text layout information.
+ * The TextLayoutShaper is responsible for shaping (with the Harfbuzz library)
*/
-class TextLayoutCache : public OnEntryRemoved<TextLayoutCacheKey, sp<TextLayoutCacheValue> >,
- public Singleton<TextLayoutCache>
-{
+class TextLayoutShaper {
public:
- TextLayoutCache();
+ TextLayoutShaper();
+ virtual ~TextLayoutShaper();
- virtual ~TextLayoutCache();
-
- bool isInitialized() {
- return mInitialized;
- }
-
- /**
- * Used as a callback when an entry is removed from the cache
- * Do not invoke directly
- */
- void operator()(TextLayoutCacheKey& text, sp<TextLayoutCacheValue>& desc);
-
- sp<TextLayoutCacheValue> getValue(const SkPaint* paint, const jchar* text, jint start, jint count,
- jint contextCount, jint dirFlags);
-
- /**
- * Clear the cache
- */
- void clear();
-
-private:
- Mutex mLock;
- bool mInitialized;
-
- GenerationCache<TextLayoutCacheKey, sp<TextLayoutCacheValue> > mCache;
-
- uint32_t mSize;
- uint32_t mMaxSize;
-
- uint32_t mCacheHitCount;
- uint64_t mNanosecondsSaved;
-
- uint64_t mCacheStartTime;
-
- RtlDebugLevel mDebugLevel;
- bool mDebugEnabled;
-
- /*
- * Class initialization
- */
- void init();
-
- /**
- * Dump Cache statistics
- */
- void dumpCacheStats();
-
-}; // TextLayoutCache
-
-/**
- * The TextLayoutEngine is responsible for shaping with Harfbuzz library
- */
-class TextLayoutEngine : public Singleton<TextLayoutEngine> {
-public:
- TextLayoutEngine();
- virtual ~TextLayoutEngine();
-
- void computeValues(TextLayoutCacheValue* value, const SkPaint* paint, const UChar* chars,
+ void computeValues(TextLayoutValue* value, const SkPaint* paint, const UChar* chars,
size_t start, size_t count, size_t contextCount, int dirFlags);
private:
@@ -292,8 +234,80 @@
void createShaperItemGlyphArrays(size_t size);
void deleteShaperItemGlyphArrays();
-}; // TextLayoutEngine
+}; // TextLayoutShaper
+/**
+ * Cache of text layout information.
+ */
+class TextLayoutCache : private OnEntryRemoved<TextLayoutCacheKey, sp<TextLayoutValue> >
+{
+public:
+ TextLayoutCache(TextLayoutShaper* shaper);
+
+ ~TextLayoutCache();
+
+ bool isInitialized() {
+ return mInitialized;
+ }
+
+ /**
+ * Used as a callback when an entry is removed from the cache
+ * Do not invoke directly
+ */
+ void operator()(TextLayoutCacheKey& text, sp<TextLayoutValue>& desc);
+
+ sp<TextLayoutValue> getValue(const SkPaint* paint, const jchar* text, jint start,
+ jint count, jint contextCount, jint dirFlags);
+
+ /**
+ * Clear the cache
+ */
+ void clear();
+
+private:
+ TextLayoutShaper* mShaper;
+ Mutex mLock;
+ bool mInitialized;
+
+ GenerationCache<TextLayoutCacheKey, sp<TextLayoutValue> > mCache;
+
+ uint32_t mSize;
+ uint32_t mMaxSize;
+
+ uint32_t mCacheHitCount;
+ uint64_t mNanosecondsSaved;
+
+ uint64_t mCacheStartTime;
+
+ RtlDebugLevel mDebugLevel;
+ bool mDebugEnabled;
+
+ /*
+ * Class initialization
+ */
+ void init();
+
+ /**
+ * Dump Cache statistics
+ */
+ void dumpCacheStats();
+
+}; // TextLayoutCache
+
+/**
+ * The TextLayoutEngine is reponsible for computing TextLayoutValues
+ */
+class TextLayoutEngine : public Singleton<TextLayoutEngine> {
+public:
+ TextLayoutEngine();
+ virtual ~TextLayoutEngine();
+
+ sp<TextLayoutValue> getValue(const SkPaint* paint, const jchar* text, jint start,
+ jint count, jint contextCount, jint dirFlags);
+private:
+ TextLayoutCache* mTextLayoutCache;
+ TextLayoutShaper* mShaper;
+}; // TextLayoutEngine
} // namespace android
#endif /* ANDROID_TEXT_LAYOUT_CACHE_H */
diff --git a/core/jni/android_database_SQLiteCommon.cpp b/core/jni/android_database_SQLiteCommon.cpp
index a94b9d2..3484467 100644
--- a/core/jni/android_database_SQLiteCommon.cpp
+++ b/core/jni/android_database_SQLiteCommon.cpp
@@ -68,50 +68,53 @@
exceptionClass = "android/database/sqlite/SQLiteDatabaseCorruptException";
break;
case SQLITE_CONSTRAINT:
- exceptionClass = "android/database/sqlite/SQLiteConstraintException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteConstraintException";
+ break;
case SQLITE_ABORT:
- exceptionClass = "android/database/sqlite/SQLiteAbortException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteAbortException";
+ break;
case SQLITE_DONE:
- exceptionClass = "android/database/sqlite/SQLiteDoneException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteDoneException";
+ break;
case SQLITE_FULL:
- exceptionClass = "android/database/sqlite/SQLiteFullException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteFullException";
+ break;
case SQLITE_MISUSE:
- exceptionClass = "android/database/sqlite/SQLiteMisuseException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteMisuseException";
+ break;
case SQLITE_PERM:
- exceptionClass = "android/database/sqlite/SQLiteAccessPermException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteAccessPermException";
+ break;
case SQLITE_BUSY:
- exceptionClass = "android/database/sqlite/SQLiteDatabaseLockedException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteDatabaseLockedException";
+ break;
case SQLITE_LOCKED:
- exceptionClass = "android/database/sqlite/SQLiteTableLockedException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteTableLockedException";
+ break;
case SQLITE_READONLY:
- exceptionClass = "android/database/sqlite/SQLiteReadOnlyDatabaseException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteReadOnlyDatabaseException";
+ break;
case SQLITE_CANTOPEN:
- exceptionClass = "android/database/sqlite/SQLiteCantOpenDatabaseException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteCantOpenDatabaseException";
+ break;
case SQLITE_TOOBIG:
- exceptionClass = "android/database/sqlite/SQLiteBlobTooBigException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteBlobTooBigException";
+ break;
case SQLITE_RANGE:
- exceptionClass = "android/database/sqlite/SQLiteBindOrColumnIndexOutOfRangeException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteBindOrColumnIndexOutOfRangeException";
+ break;
case SQLITE_NOMEM:
- exceptionClass = "android/database/sqlite/SQLiteOutOfMemoryException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteOutOfMemoryException";
+ break;
case SQLITE_MISMATCH:
- exceptionClass = "android/database/sqlite/SQLiteDatatypeMismatchException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteDatatypeMismatchException";
+ break;
+ case SQLITE_INTERRUPT:
+ exceptionClass = "android/content/OperationCanceledException";
+ break;
default:
- exceptionClass = "android/database/sqlite/SQLiteException";
- break;
+ exceptionClass = "android/database/sqlite/SQLiteException";
+ break;
}
if (sqlite3Message != NULL && message != NULL) {
diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp
index d0d53f6..e061ac3 100644
--- a/core/jni/android_database_SQLiteConnection.cpp
+++ b/core/jni/android_database_SQLiteConnection.cpp
@@ -67,8 +67,10 @@
const String8 path;
const String8 label;
+ volatile bool canceled;
+
SQLiteConnection(sqlite3* db, int openFlags, const String8& path, const String8& label) :
- db(db), openFlags(openFlags), path(path), label(label) { }
+ db(db), openFlags(openFlags), path(path), label(label), canceled(false) { }
};
// Called each time a statement begins execution, when tracing is enabled.
@@ -85,6 +87,12 @@
connection->label.string(), sql, tm * 0.000001f);
}
+// Called after each SQLite VM instruction when cancelation is enabled.
+static int sqliteProgressHandlerCallback(void* data) {
+ SQLiteConnection* connection = static_cast<SQLiteConnection*>(data);
+ return connection->canceled;
+}
+
static jint nativeOpen(JNIEnv* env, jclass clazz, jstring pathStr, jint openFlags,
jstring labelStr, jboolean enableTrace, jboolean enableProfile) {
@@ -871,6 +879,24 @@
return cur;
}
+static void nativeCancel(JNIEnv* env, jobject clazz, jint connectionPtr) {
+ SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr);
+ connection->canceled = true;
+}
+
+static void nativeResetCancel(JNIEnv* env, jobject clazz, jint connectionPtr,
+ jboolean cancelable) {
+ SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr);
+ connection->canceled = false;
+
+ if (cancelable) {
+ sqlite3_progress_handler(connection->db, 4, sqliteProgressHandlerCallback,
+ connection);
+ } else {
+ sqlite3_progress_handler(connection->db, 0, NULL, NULL);
+ }
+}
+
static JNINativeMethod sMethods[] =
{
@@ -923,6 +949,10 @@
(void*)nativeExecuteForCursorWindow },
{ "nativeGetDbLookaside", "(I)I",
(void*)nativeGetDbLookaside },
+ { "nativeCancel", "(I)V",
+ (void*)nativeCancel },
+ { "nativeResetCancel", "(IZ)V",
+ (void*)nativeResetCancel },
};
#define FIND_CLASS(var, className) \
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index 3f1af86..547607e 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -157,7 +157,7 @@
int frameSize = nbChannels * bytesPerSample;
size_t frameCount = buffSizeInBytes / frameSize;
- if (source >= AUDIO_SOURCE_CNT) {
+ if (uint32_t(source) >= AUDIO_SOURCE_CNT) {
ALOGE("Error creating AudioRecord: unknown source.");
return AUDIORECORD_ERROR_SETUP_INVALIDSOURCE;
}
@@ -198,7 +198,7 @@
// we use a weak reference so the AudioRecord object can be garbage collected.
lpCallbackData->audioRecord_ref = env->NewGlobalRef(weak_this);
- lpRecorder->set(source,
+ lpRecorder->set((audio_source_t) source,
sampleRateInHertz,
format, // word length, PCM
channels,
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 5811ddd..6a533c0 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -502,19 +502,11 @@
static void renderText(OpenGLRenderer* renderer, const jchar* text, int count,
jfloat x, jfloat y, int flags, SkPaint* paint) {
- sp<TextLayoutCacheValue> value;
-#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, text, 0, count, count, flags);
+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
+ text, 0, count, count, flags);
if (value == NULL) {
- ALOGE("Cannot get TextLayoutCache value for text = '%s'",
- String8(text, count).string());
return;
}
-#else
- value = new TextLayoutCacheValue(count);
- TextLayoutEngine::getInstance().computeValues(value.get(), paint,
- text, 0, count, count, flags);
-#endif
const jchar* glyphs = value->getGlyphs();
size_t glyphsCount = value->getGlyphsCount();
int bytesCount = glyphsCount * sizeof(jchar);
@@ -524,19 +516,11 @@
static void renderTextRun(OpenGLRenderer* renderer, const jchar* text,
jint start, jint count, jint contextCount, jfloat x, jfloat y,
int flags, SkPaint* paint) {
- sp<TextLayoutCacheValue> value;
-#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, text, start, count, contextCount, flags);
+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
+ text, start, count, contextCount, flags);
if (value == NULL) {
- ALOGE("Cannot get TextLayoutCache value for text = '%s'",
- String8(text + start, count).string());
return;
}
-#else
- value = new TextLayoutCacheValue(count);
- TextLayoutEngine::getInstance().computeValues(value.get(), paint,
- text, start, count, contextCount, flags);
-#endif
const jchar* glyphs = value->getGlyphs();
size_t glyphsCount = value->getGlyphsCount();
int bytesCount = glyphsCount * sizeof(jchar);
@@ -583,20 +567,11 @@
static void renderPosText(OpenGLRenderer* renderer, const jchar* text, int count,
const jfloat* positions, jint dirFlags, SkPaint* paint) {
- sp<TextLayoutCacheValue> value;
-#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, text, 0, count, count, dirFlags);
+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
+ text, 0, count, count, dirFlags);
if (value == NULL) {
- ALOGE("Cannot get TextLayoutCache value for text = '%s'",
- String8(text, count).string());
return;
}
-#else
- value = new TextLayoutCacheValue(count);
- TextLayoutEngine::getInstance().computeValues(value.get(), paint,
- text, 0, count, count, dirFlags);
-#endif
-
const jchar* glyphs = value->getGlyphs();
size_t glyphsCount = value->getGlyphsCount();
if (count < int(glyphsCount)) glyphsCount = count;
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 6ffda04..f21c6b8 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Verslag"</string>
<string name="wait" msgid="7147118217226317732">"Wag"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Die bladsy reageer nie meer nie."\n\n"Wil jy dit toemaak?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Program herlei"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> loop nou."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> is oorspronklik laat loop."</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 2452a4a..9b32c0d 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"ይሁን"</string>
<string name="report" msgid="4060218260984795706">"ሪፖርት"</string>
<string name="wait" msgid="7147118217226317732">"ቆይ"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"ገጹ ምላሽ የማይሰጥ ሆኗል።"\n\n"ልትዘጋው ትፈልጋለህ?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"መተግበሪያ አቅጣጫው ተቀይሯል"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> እየሄደ ነው።"</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> በዋናነት የተነሳው።"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 4c7a316..b8cd094 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"موافق"</string>
<string name="report" msgid="4060218260984795706">"إرسال تقرير"</string>
<string name="wait" msgid="7147118217226317732">"انتظار"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"أصبحت الصفحة لا تستجيب."\n\n"هل تريد إغلاقها؟"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"تمت إعادة توجيه التطبيق"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> قيد التشغيل الآن."</string>
<string name="launch_warning_original" msgid="188102023021668683">"تم تشغيل <xliff:g id="APP_NAME">%1$s</xliff:g> من الأصل."</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 0b40992..8479324 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -27,7 +27,7 @@
<string name="terabyteShort" msgid="231613018159186962">"Тб"</string>
<string name="petabyteShort" msgid="5637816680144990219">"Пб"</string>
<string name="fileSizeSuffix" msgid="7670819340156489359">"запаўняльнік<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
- <!-- outdated translation 6071602020171759109 --> <string name="untitled" msgid="4638956954852782576">"Безназоўны"</string>
+ <string name="untitled" msgid="4638956954852782576">"<Без назвы>"</string>
<string name="ellipsis" msgid="7899829516048813237">"..."</string>
<string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(Няма нумара тэлефона)"</string>
@@ -43,9 +43,9 @@
<string name="serviceErased" msgid="1288584695297200972">"Паспяхова выдалена."</string>
<string name="passwordIncorrect" msgid="7612208839450128715">"Няправільны пароль."</string>
<string name="mmiComplete" msgid="8232527495411698359">"MMI завершаны."</string>
- <!-- outdated translation 5085454289896032547 --> <string name="badPin" msgid="9015277645546710014">"Стары PIN-код уведзены няправільна."</string>
- <!-- outdated translation 5702522162746042460 --> <string name="badPuk" msgid="5487257647081132201">"Няправiльны PUK-код."</string>
- <!-- outdated translation 3695902225843339274 --> <string name="mismatchPin" msgid="609379054496863419">"Уведзеныя PIN-коды не супадаюць."</string>
+ <string name="badPin" msgid="9015277645546710014">"Стары PIN-код уведзены няправільна."</string>
+ <string name="badPuk" msgid="5487257647081132201">"Няправільны PUK-код."</string>
+ <string name="mismatchPin" msgid="609379054496863419">"Уведзеныя PIN-коды не супадаюць."</string>
<string name="invalidPin" msgid="3850018445187475377">"Увядзіце PIN-код, які змяшчае ад 4 да 8 лічбаў."</string>
<string name="invalidPuk" msgid="8761456210898036513">"Увядзіце PUK з 8 лічбаў ці больш."</string>
<string name="needPuk" msgid="919668385956251611">"Ваша SIM-карта заблакавана PUK-кодам. Увядзіце PUK, каб разблакаваць карту."</string>
@@ -68,16 +68,16 @@
<string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Па змаўчанні ідэнтыфікатар АВН не абмежаваны. Наступны выклік: абмежаваны"</string>
<string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Налады ідэнтыфікатару АВН па змаўчанні: не абмяжавана. Наступны выклік: не абмежавана"</string>
<string name="serviceNotProvisioned" msgid="8614830180508686666">"Служба не прадастаўляецца."</string>
- <!-- outdated translation 5460892159398802465 --> <string name="CLIRPermanent" msgid="3377371145926835671">"Налада ідэнтыфікатару АВН не можа быць зменена."</string>
+ <string name="CLIRPermanent" msgid="3377371145926835671">"Вы не можаце змяніць налады ідэнтыфікатара абанента, якi тэлефануе."</string>
<string name="RestrictedChangedTitle" msgid="5592189398956187498">"Абмежаваны доступ змяніўся"</string>
<string name="RestrictedOnData" msgid="8653794784690065540">"Служба дадзеных блакуецца."</string>
<string name="RestrictedOnEmergency" msgid="6581163779072833665">"Аварыйная служба блакуецца."</string>
<string name="RestrictedOnNormal" msgid="4953867011389750673">"Галасавая служба заблакаваная."</string>
- <string name="RestrictedOnAllVoice" msgid="1459318899842232234">"Усе галасавыя службы заблакаваныя."</string>
+ <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"Усе галасавыя службы заблакаваны."</string>
<string name="RestrictedOnSms" msgid="8314352327461638897">"Служба SMS заблакаваная."</string>
- <string name="RestrictedOnVoiceData" msgid="8244438624660371717">"Службы перадачы голаса і дадзеных заблакаваныя."</string>
+ <string name="RestrictedOnVoiceData" msgid="996636487106171320">"Службы перадачы голаса/дадзеных заблакаваны."</string>
<string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Службы перадачы голаса і SMS заблакаваныя."</string>
- <string name="RestrictedOnAll" msgid="2714924667937117304">"Усе службы дадзеных, галасавыя і SMS-службы заблакаваныя."</string>
+ <string name="RestrictedOnAll" msgid="5643028264466092821">"Усе службы перадачы дадзеных, галасавыя і SMS-службы заблакаваны."</string>
<string name="serviceClassVoice" msgid="1258393812335258019">"Голас"</string>
<string name="serviceClassData" msgid="872456782077937893">"Дадзеныя"</string>
<string name="serviceClassFAX" msgid="5566624998840486475">"Факс"</string>
@@ -108,27 +108,27 @@
<string name="fcComplete" msgid="3118848230966886575">"Код аб\'екта завершаны."</string>
<string name="fcError" msgid="3327560126588500777">"Праблема падлучэння ці няправільны код функцыі."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"ОК"</string>
- <string name="httpError" msgid="6603022914760066338">"Памылка сеткі."</string>
- <string name="httpErrorLookup" msgid="4517085806977851374">"URL не знойдзены."</string>
- <!-- outdated translation 2781440683514730227 --> <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"Схема аўтэнтыфікацыі сайта не падтрымліваецца."</string>
- <string name="httpErrorAuth" msgid="7293960746955020542">"Няўдалая праверка на сапраўднасць."</string>
+ <string name="httpError" msgid="7956392511146698522">"Адбылася памылка сеткі."</string>
+ <string name="httpErrorLookup" msgid="4711687456111963163">"Не атрымалася знайсці URL."</string>
+ <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"Схема аўтэнтыфікацыі сайта не падтрымліваецца."</string>
+ <string name="httpErrorAuth" msgid="1435065629438044534">"Памылка аўтэнтыфікацыі."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Праверка сапраўднасці праз проксі-сервер скончылася няўдала."</string>
- <string name="httpErrorConnect" msgid="7623096283505770433">"Падключэнне да сервера не ўдалося."</string>
- <string name="httpErrorIO" msgid="4270874999047767599">"Сервер не можа ўсталяваць сувязь. Паспрабуйце пазней."</string>
+ <string name="httpErrorConnect" msgid="8714273236364640549">"Немагчыма падлучыцца да сервера."</string>
+ <string name="httpErrorIO" msgid="2340558197489302188">"Немагчыма звязацца з серверам. Паўтарыце спробу пазней."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Час чакання злучэння з серверам скончыўся."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Старонка змяшчае зашмат перанакіраванняў сервера."</string>
- <!-- outdated translation 5257172771607996054 --> <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"Пратакол не падтрымліваецца."</string>
- <string name="httpErrorFailedSslHandshake" msgid="3088290300440289771">"Бяспечнае злучэнне ўсталяваць не ўдалося."</string>
- <string name="httpErrorBadUrl" msgid="6088183159988619736">"Старонка не можа быць адкрыта: несапраўдны URL."</string>
- <string name="httpErrorFile" msgid="8250549644091165175">"Немагчыма атрымаць доступ да файла."</string>
- <string name="httpErrorFileNotFound" msgid="5588380756326017105">"Запатрабаваны файл не знойдзены."</string>
+ <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"Пратакол не падтрымліваецца."</string>
+ <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"Немагчыма ўсталяваць бяспечнае злучэнне."</string>
+ <string name="httpErrorBadUrl" msgid="3636929722728881972">"Немагчыма адкрыць старонку, таму што URL несапраўдны."</string>
+ <string name="httpErrorFile" msgid="2170788515052558676">"Немагчыма атрымаць доступ да файла."</string>
+ <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Немагчыма знайсці патрабаваны файл."</string>
<string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Апрацоўваецца занадта шмат запытаў. Паспрабуйце яшчэ раз пазней."</string>
- <string name="notification_title" msgid="1259940370369187045">"Памылка ўваходу ў сістэму для ўліковага запісу <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
+ <string name="notification_title" msgid="8967710025036163822">"Памылка ўваходу ва ўлiковы запiс <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
<string name="contentServiceSync" msgid="8353523060269335667">"Сінхранізацыя"</string>
<string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Сінхранізацыя"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Занадта шмат выдаленняў <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
- <string name="low_memory" product="tablet" msgid="2292820184396262278">"Памяць планшэта поўная! Выдаліце некаторыя файлы, каб вызваліць месца."</string>
- <string name="low_memory" product="default" msgid="6632412458436461203">"Памяць тэлефона поўная! Выдаліце некаторыя файлы, каб вызваліць прастору."</string>
+ <string name="low_memory" product="tablet" msgid="6494019234102154896">"Памяць планшэта поўная. Выдаліце некаторыя файлы, каб вызваліць месца."</string>
+ <string name="low_memory" product="default" msgid="3475999286680000541">"Памяць тэлефона поўная. Выдаліце некаторыя файлы, каб вызваліць месца."</string>
<string name="me" msgid="6545696007631404292">"Я"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"Параметры планшэта"</string>
<string name="power_dialog" product="default" msgid="1319919075463988638">"Параметры тэлефона"</string>
@@ -137,12 +137,15 @@
<string name="turn_off_radio" msgid="8198784949987062346">"Адключыць бесправадную сетку"</string>
<string name="screen_lock" msgid="799094655496098153">"Блакіроўка экрана"</string>
<string name="power_off" msgid="4266614107412865048">"Выключыць"</string>
+ <string name="silent_mode_silent" msgid="319298163018473078">"Званок выкл."</string>
+ <string name="silent_mode_vibrate" msgid="7072043388581551395">"Званок з вібрацыяй"</string>
+ <string name="silent_mode_ring" msgid="8592241816194074353">"Званок укл."</string>
<string name="shutdown_progress" msgid="2281079257329981203">"Выключэнне..."</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Планшэт будзе адключаны."</string>
<string name="shutdown_confirm" product="default" msgid="649792175242821353">"Ваш тэлефон будзе выключаны."</string>
- <!-- outdated translation 6656441286856415014 --> <string name="shutdown_confirm_question" msgid="2906544768881136183">"Адключыць прыладу?"</string>
+ <string name="shutdown_confirm_question" msgid="2906544768881136183">"Закрыць?"</string>
<string name="recent_tasks_title" msgid="3691764623638127888">"Апошнія"</string>
- <!-- outdated translation 279702952298056674 --> <string name="no_recent_tasks" msgid="8794906658732193473">"Няма апошніх прыкладанняў."</string>
+ <string name="no_recent_tasks" msgid="8794906658732193473">"Няма апошніх прыкладанняў."</string>
<string name="global_actions" product="tablet" msgid="408477140088053665">"Параметры планшэта"</string>
<string name="global_actions" product="default" msgid="2406416831541615258">"Параметры тэлефона"</string>
<string name="global_action_lock" msgid="2844945191792119712">"Блакіроўка экрана"</string>
@@ -157,16 +160,16 @@
<string name="safeMode" msgid="2788228061547930246">"Бяспечны рэжым"</string>
<string name="android_system_label" msgid="6577375335728551336">"Сістэма Android"</string>
<string name="permgrouplab_costMoney" msgid="5429808217861460401">"Платныя паслугі"</string>
- <!-- outdated translation 8193824940620517189 --> <string name="permgroupdesc_costMoney" msgid="8596717365335027057">"Дазволіць прыкладанням рабіць рэчы, якія могуць каштаваць вам грошай."</string>
+ <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"Рабіць справы, якія могуць каштаваць вам грошай."</string>
<string name="permgrouplab_messages" msgid="7521249148445456662">"Вашыя паведамленні"</string>
- <!-- outdated translation 7045736972019211994 --> <string name="permgroupdesc_messages" msgid="7821999071003699236">"Чытайце і пішыце вашыя паведамленні электроннай пошты, SMS і г. д."</string>
+ <string name="permgroupdesc_messages" msgid="7821999071003699236">"Счытваць і запісваць вашы SMS-паведамленні, паведамленні электроннай пошты і іншыя паведамленні."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Вашая персанальная інфармацыя"</string>
<string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Прамы доступ да кантактаў і календара, якія захоўваюцца на планшэце."</string>
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Прамы доступ да кантактаў і календара, захаваных на тэлефоне."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Ваша месцазнаходжанне"</string>
- <string name="permgroupdesc_location" msgid="2430258821648348660">"Кантралюйце сваё фізічнае месцазнаходжанне"</string>
+ <string name="permgroupdesc_location" msgid="5704679763124170100">"Кантраляваць сваё фізічнае месцазнаходжанне."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Сеткавая сувязь"</string>
- <!-- outdated translation 5035763698958415998 --> <string name="permgroupdesc_network" msgid="4917593670797570584">"Дазволіць прыкладанням атрымліваць доступ да розных функцый сеткі."</string>
+ <string name="permgroupdesc_network" msgid="4478299413241861987">"Доступ да розных функцый сеткі."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Вашыя ўліковыя запісы"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ да дзеючых уліковых запісаў."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Кіраванне апаратным забеспячэннем"</string>
@@ -176,352 +179,358 @@
<string name="permgrouplab_systemTools" msgid="4652191644082714048">"Сістэмныя інструменты"</string>
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ніжні ўзровень доступу і кіравання сістэмай."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Сродкі распрацоўкі"</string>
- <!-- outdated translation 9056431193893809814 --> <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функцыі, патрэбныя толькі для распрацоўшчыкаў прыкладанняў."</string>
+ <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функцыi, патрэбныя толькі для распрацоўшчыкаў прыкладанняў."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Сховішча"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Атрымаць доступ да USB-назапашвальнiка."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ да SD-карты."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"адключаць ці змяняць радок стану"</string>
- <!-- outdated translation 1365473595331989732 --> <string name="permdesc_statusBar" msgid="8434669549504290975">"Дазваляе прыкладанням адключаць радок стану або дадаваць і выдаляць сістэмныя значкі."</string>
+ <string name="permdesc_statusBar" msgid="8434669549504290975">"Дазваляе прыкладанням адключаць радок стану або дадаваць і выдаляць сістэмныя значкі."</string>
<string name="permlab_statusBarService" msgid="7247281911387931485">"радок стану"</string>
- <!-- outdated translation 4097605867643520920 --> <string name="permdesc_statusBarService" msgid="716113660795976060">"Дазваляе прыкладанням быць радком стану."</string>
+ <string name="permdesc_statusBarService" msgid="716113660795976060">"Дазваляе прыкладанням быць радком стану."</string>
<string name="permlab_expandStatusBar" msgid="1148198785937489264">"разгарнуць/згарнуць радок стану"</string>
- <!-- outdated translation 7088604400110768665 --> <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Дазваляе прыкладанням разгортваць або згортваць панэль стану."</string>
+ <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Дазваляе прыкладанню разгортваць ці згортваць радок стану."</string>
<string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"перахапляць выходныя выклікі"</string>
- <!-- outdated translation 2228988201852654461 --> <string name="permdesc_processOutgoingCalls" msgid="1152111671618301044">"Дазваляе прыкладанням апрацоўваць выходныя выклікі і змяняць набіраны нумар. Шкоднасныя прыкладанні могуць адсочваць, перанакіроўваць ці забараняць выходныя выклікі."</string>
+ <string name="permdesc_processOutgoingCalls" msgid="1152111671618301044">"Дазваляе прыкладанням апрацоўваць выходныя выклікі і змяняць набіраны нумар. Шкоднасныя прыкладаннi могуць адсочваць, перанакіроўваць ці прадухіляць выходныя выклікі."</string>
<string name="permlab_receiveSms" msgid="2697628268086208535">"атрымліваць SMS"</string>
- <!-- outdated translation 6298292335965966117 --> <string name="permdesc_receiveSms" msgid="8107887121893611793">"Дазваляе прыкладанням атрымліваць і апрацоўваць SMS. Шкоднасныя прыкладанні могуць адсочваць вашыя паведамленні або выдаляць іх, не паказваючы вам."</string>
+ <string name="permdesc_receiveSms" msgid="8107887121893611793">"Дазваляе прыкладанням атрымліваць і апрацоўваць SMS-паведамленні. Шкоднасныя прыкладанні могуць адсочваць вашыя паведамленні або выдаляць іх, не паказваючы вам."</string>
<string name="permlab_receiveMms" msgid="8894700916188083287">"атрымліваць MMS"</string>
- <!-- outdated translation 4563346832000174373 --> <string name="permdesc_receiveMms" msgid="1424805308566612086">"Дазваляе прыкладанням атрымліваць і апрацоўваць паведамленні MMS. Шкоднасныя прыкладанні могуць адсочваць вашыя паведамленні або выдаляць іх без вашага ведама."</string>
+ <string name="permdesc_receiveMms" msgid="1424805308566612086">"Дазваляе прыкладанням атрымліваць і апрацоўваць MMS-паведамленні. Шкоднасныя прыкладанні могуць адсочваць вашы паведамленні або выдаляць іх, не паказваючы вам."</string>
<string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"атрымліваць экстраныя трансляцыі"</string>
- <!-- outdated translation 7118393393716546131 --> <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Дазваляе прыкладанням атрымліваць і апрацоўваць экстраныя шырокавяшчальныя паведамленні. Гэты дазвол даступны толькі для сістэмных прыкладанняў."</string>
+ <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Дазваляе прыкладанням атрымліваць і апрацоўваць экстраныя паведамленні. Гэты дазвол даступны толькі для сістэмных прыкладанняў."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"адпраўляць SMS"</string>
- <!-- outdated translation 1946540351763502120 --> <string name="permdesc_sendSms" msgid="906546667507626156">"Дазваляе прыкладанням адпраўляць SMS. Шкоднасныя прыкладанні могуць траціць вашыя грошы шляхам адпраўкі паведамленняў без пацверджання карыстальніка."</string>
+ <string name="permdesc_sendSms" msgid="906546667507626156">"Дазваляе прыкладанням дасылаць SMS-паведамленні. Шкоднасныя прыкладанні могуць каштаваць вам грошай з-за адпраўкі паведамленняў без вашага пацвярджэння."</string>
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"адпраўляць SMS-паведамленні без пацверджання"</string>
- <!-- outdated translation 4477752891276276168 --> <string name="permdesc_sendSmsNoConfirmation" msgid="3437759207020400204">"Дазваляе прыкладанням адпраўляць SMS. Шкоднасныя прыкладанні могуць спісваць вашыя грошы, адпраўляючы паведамленні без вашага пацверджання."</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="3437759207020400204">"Дазваляе прыкладанню дасылаць SMS-паведамленні. Шкоднасныя прыкладанні могуць каштаваць вам грошай з-за адпраўкі паведамленняў без вашага пацверджання."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"чытаць SMS або MMS"</string>
- <!-- outdated translation 5836710350295631545 --> <string name="permdesc_readSms" product="tablet" msgid="2341692916884515613">"Дазваляе прыкладанням чытаць SMS, якія захоўваюцца на планшэце ці на SIM-карце. Шкоднасныя прыкладанні могуць чытаць вашыя канфідэнцыйныя паведамленні."</string>
- <!-- outdated translation 5836710350295631545 --> <string name="permdesc_readSms" product="default" msgid="5653850482025875493">"Дазваляе прыкладанням чытаць SMS, якія захоўваюцца на планшэце ці на SIM-карце. Шкоднасныя прыкладанні могуць чытаць вашыя канфідэнцыйныя паведамленні."</string>
+ <string name="permdesc_readSms" product="tablet" msgid="2341692916884515613">"Дазваляе прыкладанням чытаць SMS-паведамленні, якія захоўваюцца на планшэце ці SIM-карце. Шкоднасныя прыкладанні могуць чытаць вашы канфідэнцыйныя паведамленні."</string>
+ <string name="permdesc_readSms" product="default" msgid="5653850482025875493">"Дазваляе прыкладанню счытваць SMS-паведамленні, якія захоўваюцца ў тэлефоне або на SIM-карце. Шкоднасныя прыкладанні могуць чытаць вашы канфідэнцыйныя паведамленні."</string>
<string name="permlab_writeSms" msgid="6881122575154940744">"рэдагаваць SMS ці MMS"</string>
- <!-- outdated translation 5332124772918835437 --> <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Дазваляе прыкладанню запіс ў SMS паведамленнях, якія захоўваюцца на планшэце ці на SIM-карце. Шкоднасныя прыкладанні могуць выдаляць вашыя паведамленні."</string>
- <!-- outdated translation 5332124772918835437 --> <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Дазваляе прыкладанню запіс ў SMS паведамленнях, якія захоўваюцца на планшэце ці на SIM-карце. Шкоднасныя прыкладанні могуць выдаляць вашыя паведамленні."</string>
+ <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Дазваляе прыкладанню запісваць дадзеныя ў SMS-паведамленні, якія захоўваюцца на планшэце або на SIM-карце. Шкоднасныя прыкладанні могуць выдаляць вашы паведамленні."</string>
+ <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Дазваляе прыкладанням запісваць дадзеныя ў SMS-паведамленні, якія захоўваюцца ў тэлефоне або на SIM-карце. Шкоднасныя прыкладанні могуць выдаляць вашы паведамленні."</string>
<string name="permlab_receiveWapPush" msgid="8258226427716551388">"атрымліваць WAP"</string>
- <!-- outdated translation 5979623826128082171 --> <string name="permdesc_receiveWapPush" msgid="7983455145335316872">"Дазваляе прыкладанням атрымліваць і апрацоўваць WAP-паведамленні. Шкоднасныя прыкладанні могуць адсочваць вашыя паведамленні або выдаляць іх, не паказваючы вам."</string>
- <!-- outdated translation 5005277531132573353 --> <string name="permlab_getTasks" msgid="6466095396623933906">"атрымліваць запушчаныя прыкладанні"</string>
- <!-- outdated translation 7048711358713443341 --> <string name="permdesc_getTasks" msgid="6608159250520381359">"Дазваляе прыкладанням атрымліваць інфармацыю аб бягучых і нядаўна запушчаных задачах. Можа дазволіць шкоднасным прыкладаннм выяўляць асабістую інфармацыю аб іншых прыкладаннях."</string>
- <!-- outdated translation 5669588525059921549 --> <string name="permlab_reorderTasks" msgid="2018575526934422779">"змяняць парадак запуску прыкладанняў"</string>
- <!-- outdated translation 126252774270522835 --> <string name="permdesc_reorderTasks" msgid="4175137612205663399">"Дазваляе прыкладанням перамяшчаць задачы на пярэдні план і ў фон. Шкоднасныя прыкладанні могуць прымусова перамясціць сябе на пярэдні план без вашага кантролю."</string>
- <!-- outdated translation 4802740047161700683 --> <string name="permlab_removeTasks" msgid="6821513401870377403">"спыненне запушчаных прыкладанняў"</string>
- <!-- outdated translation 2000332928514575461 --> <string name="permdesc_removeTasks" msgid="1000226123143185094">"Дазваляе прыкладанням выдаляць задачы і спыняць адпаведныя прыкладанні. Шкоднасныя прыкладаннi могуць паўплываць на функцыянаванне іншых прыкладанняў."</string>
- <!-- outdated translation 4339730312925176742 --> <string name="permlab_setDebugApp" msgid="3022107198686584052">"уключаць адладку прыкладанняў"</string>
- <!-- outdated translation 5584310661711990702 --> <string name="permdesc_setDebugApp" msgid="6215654419903651172">"Дазваляе прыкладанням уключаць адладку іншых прыкладанняў. Шкоднасныя прыкладаннi могуць карыстацца гэтым, каб спыняць іншыя прыкладанні."</string>
+ <string name="permdesc_receiveWapPush" msgid="7983455145335316872">"Дазваляе прыкладанням атрымліваць і апрацоўваць WAP-паведамленні. Шкоднасныя прыкладанні могуць адсочваць вашы паведамленні або выдаляць іх, не паказваючы вам."</string>
+ <string name="permlab_getTasks" msgid="6466095396623933906">"атрымаць запушчаныя прыкладанні"</string>
+ <string name="permdesc_getTasks" msgid="6608159250520381359">"Дазваляе прыкладанням атрымліваць інфармацыю пра бягучыя і нядаўна запушчаныя заданнi. Шкоднасныя прыкладанні могуць атрымліваць асабістую інфармацыю пра іншыя прыкладаннi."</string>
+ <string name="permlab_reorderTasks" msgid="2018575526934422779">"змяніць парадак запушчаных прыкладанняў"</string>
+ <string name="permdesc_reorderTasks" msgid="4175137612205663399">"Дазваляе прыкладанням перамяшчаць заданні на пярэдні план і фон. Шкоднасныя прыкладанні могуць прымусова рабіць сябе асноўнымі без вашага ведама."</string>
+ <string name="permlab_removeTasks" msgid="6821513401870377403">"спыніць запушчаныя прыкладанні"</string>
+ <string name="permdesc_removeTasks" msgid="1394714352062635493">"Дазваляе прыкладанням выдаляць заданні і спыняць прыкладанні, якія іх выкарыстоўваюць. Шкоднасныя прыкладаннi могуць перашкодзiць працы іншых прыкладанняў."</string>
+ <string name="permlab_setDebugApp" msgid="3022107198686584052">"уключыць адладку прыкладання"</string>
+ <string name="permdesc_setDebugApp" msgid="4474512416299013256">"Дазваляе прыкладанням уключаць адладку для іншага прыкладання. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб спыняць іншыя прыкладанні."</string>
<string name="permlab_changeConfiguration" msgid="8214475779521218295">"змяняць налады карыстальніцкага інтэрфейса"</string>
- <!-- outdated translation 3465121501528064399 --> <string name="permdesc_changeConfiguration" msgid="4104052649900380324">"Дазваляе прыкладанням змяняць бягучую канфігурацыю, напрыклад мову i агульны памер шрыфта."</string>
+ <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Дазваляе прыкладанням змяняць бягучую канфігурацыю, напрыклад мову цi агульны памер шрыфта."</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"дазваляць рэжым \"У аўтамабілі\""</string>
- <!-- outdated translation 5673461159384850628 --> <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Дазваляе прыкладанням уключаць рэжым \"У аўтамабілі\"."</string>
+ <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Дазваляе прыкладанню ўключаць рэжым гучнай сувязi."</string>
<string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"выдаліць фонавыя працэсы"</string>
- <!-- outdated translation 2908829602869383753 --> <string name="permdesc_killBackgroundProcesses" msgid="931129103262126617">"Дазваляе прыкладанням спыняць фонавыя працэсы іншых прыкладанняў, нават калі памяці дастаткова."</string>
- <!-- outdated translation 1447830113260156236 --> <string name="permlab_forceStopPackages" msgid="2329627428832067700">"прымусова спыняць іншыя прыкладанні"</string>
- <!-- outdated translation 7263036616161367402 --> <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"Дазваляе прыкладанню прымусова спыняць іншыя прыкладанні."</string>
- <!-- outdated translation 1804196839880393631 --> <string name="permlab_forceBack" msgid="652935204072584616">"прымусова закрываць прыкладанні"</string>
- <!-- outdated translation 6534109744159919013 --> <string name="permdesc_forceBack" msgid="3892295830419513623">"Дазваляе прыкладанням прымусова спыняць усе актыўныя працэсы і працягваць працу. Ніколі не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permdesc_killBackgroundProcesses" msgid="931129103262126617">"Дазваляе прыкладанням спыняць фонавыя працэсы іншых прыкладанняў, нават калі памяці дастаткова."</string>
+ <string name="permlab_forceStopPackages" msgid="2329627428832067700">"прымусова спыніць іншыя прыкладанні"</string>
+ <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"Дазваляе прыкладанням прымусова спыняць іншыя прыкладанні."</string>
+ <string name="permlab_forceBack" msgid="652935204072584616">"прымусова закрыць прыкладанне"</string>
+ <string name="permdesc_forceBack" msgid="3892295830419513623">"Дазваляе прыкладанням прымусова закрываць любы асноўны працэс. Не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_dump" msgid="1681799862438954752">"атрымліваць унутраны стан сістэмы"</string>
- <!-- outdated translation 2198776174276275220 --> <string name="permdesc_dump" msgid="1778299088692290329">"Дазваляе прыкладанням атрымліваць інфармацыю аб унутраным стане сістэмы. Шкодныя прыкладанні могуць атрымлiваць шырокі спектр прыватнай і абараняемай інфармацыі, якая звычайна ніколі ім не патрабуецца."</string>
+ <string name="permdesc_dump" msgid="1778299088692290329">"Дазваляе прыкладанням атрымліваць інфармацыю аб унутраным стане сістэмы. Шкоднасныя прыкладанні могуць атрымліваць шырокі спектр прыватных дадзеных і дадзеных, прызначаных для забеспячэння бяспекі інфармацыі, якія звычайна ім не патрэбны."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"атрыманне зместу экрана"</string>
- <!-- outdated translation 3390962289797156152 --> <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Дазваляе прыкладанням атрымліваць змест актыўнага акна. Шкоднасныя прыкладаннi могуць атрымаць увесь змест акна і вывучыць увесь яго тэкст, акрамя пароляў."</string>
+ <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Дазваляе прыкладанням атрымліваць змесціва актыўнага акна. Шкоднасныя прыкладанні могуць атрымліваць усё змесціва акна і разглядаць увесь яго тэкст, акрамя пароляў."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"частковае адключэнне"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Спыняе дзейнасць менеджэра. Не выконвае поўнае адключэнне."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"прадухіляць пераключэнне прыкладанняў"</string>
- <!-- outdated translation 3857886086919033794 --> <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Прадухіляе карыстальнікаў ад пераходу на іншае прыкладанне."</string>
- <!-- outdated translation 7811586187574696296 --> <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"адсочваць усе запускі прыкладанняў і кіраваць iмi"</string>
- <!-- outdated translation 2149363027173451218 --> <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Дазваляе прыкладанню сачыць за тым, як сістэма запускае працэсы, i кiраваць гэтым дзеяннем. Шкоднасныя прыкладанні могуць цалкам негатыўна паўсплываць на сістэму. Гэты дазвол неабходны толькі для распрацоўкі, не для звычайнага выкарыстання."</string>
+ <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Не дазваляе карыстальніку пераходзіць да іншага прыкладання."</string>
+ <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"адсочваць і кантраляваць запуск усіх прыкладанняў"</string>
+ <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Дазваляе прыкладанню сачыць і кантраляваць, як сістэма запускае працэсы. Шкоднасныя прыкладанні могуць цалкам парушыць працу сістэмы. Гэты дазвол патрэбны толькі для распрацоўкі, ніколі для звычайнага выкарыстання."</string>
<string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"трансляваць паведамленні аб выдаленні пакетаў"</string>
- <!-- outdated translation 3453286591439891260 --> <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Дазваляе прыкладанням трансліраваць апавяшчэнне аб тым, што пакет прыкладання быў выдалены. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб спыніць любое іншае запушчанае прыкладанне."</string>
+ <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Дазваляе прыкладанням перадаваць апавяшчэнне, што пакет прыкладанняў быў выдалены. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб спыняць любыя іншыя запушчаныя прыкладанні."</string>
<string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"перасылаць трансляцыі, атрыманыя па SMS"</string>
- <!-- outdated translation 9122419277306740155 --> <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Дазваляе прыкладанню трансляваць апавяшчэнне, што паведамленне SMS атрыманае. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб падрабляць уваходныя паведамленні SMS."</string>
+ <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Дазваляе прыкладанням перадаваць апавяшчэнне пра атрыманне SMS-паведамлення. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб падрабляць уваходныя SMS-паведамленні."</string>
<string name="permlab_broadcastWapPush" msgid="3145347413028582371">"пасылаць сігнал WAP-PUSH-received"</string>
- <!-- outdated translation 3955303669461378091 --> <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Дазваляе прыкладанням трансляваць апавяшчэнне аб атрыманні паведамлення WAP PUSH. Шкоднасныя прыкладаннi могуць карыстацца гэтым, каб падрабляць атрыманне MMS-паведамленняў ці моўчкі мяняць змест любых вэб-старонак на шкодны."</string>
+ <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Дазваляе прыкладанням перадаваць апавяшчэнне, што паведамленне WAP PUSH не было атрымана. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб падрабляць атрыманне MMS-паведамлення або непрыкметна замяняць змесціва любой вэб-старонкі на шкоднасную версiю."</string>
<string name="permlab_setProcessLimit" msgid="2451873664363662666">"абмяжоўваць колькасць запушчаных працэсаў"</string>
- <!-- outdated translation 7824786028557379539 --> <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Дазваляе прыкладанням кантраляваць максімальную колькасць працэсаў, якія будуць працаваць. Ніколі не патрабуецца для звычайных прыкладанняў."</string>
- <!-- outdated translation 5342837862439543783 --> <string name="permlab_setAlwaysFinish" msgid="238828158465736054">"закрываць усе фонавыя прыкладанні"</string>
- <!-- outdated translation 8773936403987091620 --> <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Дазваляе прыкладанню кантраляваць завяршэнне дзеянняў падчас іх пераходу ў фон. Ніколі не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Дазваляе прыкладанням кантраляваць максімальную колькасць запушчаных працэсаў. Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permlab_setAlwaysFinish" msgid="238828158465736054">"закрывае ўсе фонавыя прыкладанні"</string>
+ <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Дазваляе прыкладанням кантраляваць, ці будуць працэсы заўсёды завяршацца, як толькі яны пераходзяць у фонавы рэжым. Не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_batteryStats" msgid="7863923071360031652">"змяняць статыстыку батарэі"</string>
- <!-- outdated translation 5847319823772230560 --> <string name="permdesc_batteryStats" msgid="6835186932305744068">"Дазваляе мяняць сабраную статыстыку акумулятара. Не выкарыстоўваецца звычайнымі прыкладаннямі."</string>
+ <string name="permdesc_batteryStats" msgid="6835186932305744068">"Дазваляе прыкладанням змяняць сабраную статыстыку акумулятара. Не для выкарыстання звычайнымі прыкладаннямі."</string>
<string name="permlab_backup" msgid="470013022865453920">"кантраляваць рэзервовае капіяванне і аднаўленне сістэмы"</string>
- <!-- outdated translation 4837493065154256525 --> <string name="permdesc_backup" msgid="6912230525140589891">"Дазваляе прыкладанням кантраляваць механізм рэзервовага капіявання і аднаўлення сістэмы. Не выкарыстоўваецца звычайнымі прыкладаннямі."</string>
+ <string name="permdesc_backup" msgid="6912230525140589891">"Дазваляе прыкладанням кантраляваць рэзервовае капіяванне сістэмы і механізм аднаўлення. Не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_confirm_full_backup" msgid="5557071325804469102">"пацверджанне поўнага рэзервовага капіявання або аднаўлення"</string>
- <!-- outdated translation 9005017754175897954 --> <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Дазваляе прыкладанням запускаць інтэрфейс пацверджання поўнага рэзервовага капіявання. Выкарыстоўваецца не ўсімі прыкладаннямі."</string>
+ <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Дазваляе прыкладанням запускаць поўны інтэрфейс карыстальніка пацвярджэння рэзервавання. Не для выкарыстання звычайнымі прыкладаннямі."</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"паказваць несанкцыянаваныя вокны"</string>
- <!-- outdated translation 5895082268284998469 --> <string name="permdesc_internalSystemWindow" msgid="6510907081810231374">"Дазваляе ствараць вокны, прызначаныя для ўнутранай сістэмы карыстальніцкага інтэрфейса. Не выкарыстоўваецца звычайнымі прыкладаннямі."</string>
+ <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Дазваляе прыкладанням ствараць вокны, прызначаныя для выкарыстання ўнутраным інтэрфейсам карыстальніка сістэмы. Не для выкарыстання звычайнымі прыкладаннямі."</string>
<string name="permlab_systemAlertWindow" msgid="3372321942941168324">"паказваць абвесткі стану сістэмы"</string>
- <!-- outdated translation 2884149573672821318 --> <string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"Дазваляе прыкладанню паказваць вокны сiстэмных паведамленняў. Шкоднасныя прыкладанні могуць заняць увесь экран."</string>
+ <string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"Дазваляе прыкладанням паказваць вокны апавяшчэння сістэмы. Шкоднасныя прыкладанні могуць захоплiваць увесь экран."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"зменяць агульную хуткасць анімацыі"</string>
- <!-- outdated translation 7181522138912391988 --> <string name="permdesc_setAnimationScale" msgid="6505093307223395456">"Дазваляе прыкладанням у любы час мяняць агульную хуткасць анімацыі (хутчэй ці павольней)."</string>
- <!-- outdated translation 17124341698093865 --> <string name="permlab_manageAppTokens" msgid="1286505717050121370">"кіраваць меткамі прыкладанняў"</string>
- <!-- outdated translation 977127907524195988 --> <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Дазваляе прыкладанням ствараць уласныя квіткі і кіраваць імі, у абыход нармальнага Z-упарадкавання. Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Дазваляе прыкладанням у любы час змяняць агульную хуткасць анімацыі (хутчэй ці павольней)."</string>
+ <string name="permlab_manageAppTokens" msgid="1286505717050121370">"кіраваць ключамі прыкладання"</string>
+ <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Дазваляе прыкладанням ствараць сваімі ўласнымі ключамі, абыходзячы іх звычайны Z-парадак. Не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"націскаць клавішы і кнопкі кіравання"</string>
- <!-- outdated translation 7200014808195664505 --> <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Дазваляе прыкладанням ажыццяўляць свае ўласныя працэсы ўводу (націску клавіш і г. д.) для іншых прыкладанняў. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб атрымаць кантроль над планшэтам."</string>
- <!-- outdated translation 7200014808195664505 --> <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Дазваляе прыкладанням ажыццяўляць свае ўласныя працэсы ўводу (націску клавіш і г. д.) для іншых прыкладанняў. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб атрымаць кантроль над планшэтам."</string>
+ <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Дазваляе прыкладанням ажыццяўляць свае ўласныя падзеі ўводу (націску клавіш і г.д.) для іншых прыкладанняў. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб захапіць кіраванне планшэтам."</string>
+ <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Дазваляе прыкладанню ажыццяўляць свае ўласныя падзеі ўводу (націску клавіш і г. д.) для іншых прыкладанняў. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб захапіць кіраванне тэлефонам."</string>
<string name="permlab_readInputState" msgid="469428900041249234">"запісваць, што вы друкуеце, і дзеянні, якія вы прадпрымаеце"</string>
- <!-- outdated translation 5132879321450325445 --> <string name="permdesc_readInputState" msgid="8387754901688728043">"Дазваляе прыкладанням праглядаць клавішы, якія вы націскаеце, нават пры ўзаемадзеянні з іншым прыкладаннем (напрыклад, пры ўводзе пароля). Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permdesc_readInputState" msgid="8387754901688728043">"Дазваляе прыкладанням адсочваць клавішы, якія вы націскаеце, нават падчас узаемадзеяння з іншым прыкладаннем (напрыклад, пры ўводзе пароля). Не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"звязацца з метадам уводу"</string>
- <!-- outdated translation 3734838321027317228 --> <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Дазваляе ўладальніку звязвацца з інтэрфейсам верхняга ўзроўню метадам уводу. Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Дазваляе ўладальніку прывязвацца да інтэрфейсу верхняга ўзроўню метада ўводу. Не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"звязаць з тэкставай службай"</string>
- <!-- outdated translation 172508880651909350 --> <string name="permdesc_bindTextService" msgid="8151968910973998670">"Дазваляе ўладальніку звязвацца з інтэрфейсам верхняга ўзроўню тэкставай паслугі (напрыклад, SpellCheckerService). Ніколі не патрабуецца звычайным прыкладанням."</string>
+ <string name="permdesc_bindTextService" msgid="8151968910973998670">"Дазваляе ўладальніку прывязвацца да інтэрфейсу верхняга ўзроўню тэкставай паслугі (напрыклад, SpellCheckerService). Ніколі не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_bindVpnService" msgid="4708596021161473255">"звязвацца з VPN сэрвісам"</string>
- <!-- outdated translation 6011554199384584151 --> <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Дазваляе ўладальніку звязвацца з інтэрфейсам VPN службы вышэйшага ўзроўню. Не патрэбна для звычайных праграм."</string>
+ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Дазваляе ўладальніку звязвацца з інтэрфейсам службы VPN вышэйшага ўзроўню. Не патрэбна для звычайных прыкладанняў."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"прывязаць да шпалер"</string>
- <!-- outdated translation 5287754520361915347 --> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Дазваляе ўладальніку ўсталёўваць прывязку да інтэрфейсу шпалер верхняга ўзроўню. Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Дазваляе ўладальніку ўсталёўваць прывязку да інтэрфейсу шпалер верхняга ўзроўню. Не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"прывязаць да службы віджэту"</string>
- <!-- outdated translation 2930855984822926963 --> <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Дазваляе ўладальніку прывязаць верхні ўзровень інтэрфейсу службы віджэта. Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Дазваляе ўладальніку прывязвацца да інтэрфейсу верхняга ўзроўню службы віджэта. Не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"узаемадзейнічаць з адміністратарам прылады"</string>
- <!-- outdated translation 8714424333082216979 --> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Дазваляе ўладальніку адпраўляць намеры да адміністратара прылады. Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Дазваляе ўладальніку адпраўляць намеры да адміністратара прылады. Не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_setOrientation" msgid="3365947717163866844">"змяняць арыентацыю экрана"</string>
- <!-- outdated translation 6335814461615851863 --> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Дазваляе прыкладанням мяняць арыентацыю экрана ў любы час. Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permdesc_setOrientation" msgid="3046126619316671476">"Дазваляе прыкладанням змяняць паварот экрана ў любы час. Не патрабуецца для звычайных прыкладанняў."</string>
<string name="permlab_setPointerSpeed" msgid="9175371613322562934">"змена хутк. перамяшч. ўказ."</string>
- <!-- outdated translation 137436038503379864 --> <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"Дазваляе прыкладанням у любы момант мяняць хуткасць перамяшчэння ўказальніка мышы ці трэкпаду. Не патрабуецца для звычайных прыкладанняў."</string>
- <!-- outdated translation 4255467255488653854 --> <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"адпраўляць сігналы Linux да прыкладанняў"</string>
- <!-- outdated translation 3565530463215015289 --> <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"Дазваляе прыкладанням запытваць адпраўку прадстаўленага сігналу да ўсіх пастаянных працэсаў."</string>
- <!-- outdated translation 8659652042401085862 --> <string name="permlab_persistentActivity" msgid="8841113627955563938">"прымусіць прыкладанне працаваць заўсёды"</string>
- <!-- outdated translation 5037199778265006008 --> <string name="permdesc_persistentActivity" msgid="4909910271316074418">"Дазваляе прыкладанням рабіць свае часткі ўстойлівымі, каб сістэма не магла выкарыстоўваць іх для іншых прыкладанняў."</string>
- <!-- outdated translation 3343439331576348805 --> <string name="permlab_deletePackages" msgid="184385129537705938">"выдаляць прыкладанні"</string>
- <!-- outdated translation 3634943677518723314 --> <string name="permdesc_deletePackages" msgid="7411480275167205081">"Дазваляе прыкладанням выдаляць пакеты Android. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб выдаляць важныя прыкладанні."</string>
- <!-- outdated translation 2192134353540277878 --> <string name="permlab_clearAppUserData" msgid="274109191845842756">"выдаляць дадзеныя іншых прыкладанняў"</string>
- <!-- outdated translation 7546345080434325456 --> <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"Дазваляе прыкладанням выдаляць дадзеныя карыстальніка."</string>
- <!-- outdated translation 1518556602634276725 --> <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"выдаляць кэш іншых прыкладанняў"</string>
- <!-- outdated translation 2283074077168165971 --> <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Дазваляе прыкладанням выдаляць файлы кэша."</string>
- <!-- outdated translation 4799785352306641460 --> <string name="permlab_getPackageSize" msgid="7472921768357981986">"мераць месца для захоўвання прыкладання"</string>
- <!-- outdated translation 5557253039670753437 --> <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Дазваляе прыкладанням атрымліваць свой код, дадзеныя і аб\'ём кэш-памяці"</string>
- <!-- outdated translation 335800214119051089 --> <string name="permlab_installPackages" msgid="2199128482820306924">"непасрэдна ўсталёўваць прыкладанні"</string>
- <!-- outdated translation 526669220850066132 --> <string name="permdesc_installPackages" msgid="5628530972548071284">"Дазваляе прыкладанням усталёўваць новыя або абноўленыя пакеты Android. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб дадаваць новыя прыкладанні з дазволамі высокага ўзроўню."</string>
- <!-- outdated translation 4747698311163766540 --> <string name="permlab_clearAppCache" msgid="7487279391723526815">"выдаляць усе дадзеныя кэша прыкладання"</string>
- <!-- outdated translation 3097119797652477973 --> <string name="permdesc_clearAppCache" product="tablet" msgid="3523396284474042284">"Дазваляе прыкладанню вызваліць прастору на планшэце, выдаліўшы файлы з каталогу кэша прыкладання. Доступ да сістэмных працэсаў звычайна вельмі абмежаваны."</string>
- <!-- outdated translation 3097119797652477973 --> <string name="permdesc_clearAppCache" product="default" msgid="5067988373366292186">"Дазваляе прыкладанню вызваліць прастору на планшэце, выдаліўшы файлы з каталогу кэша прыкладання. Доступ да сістэмных працэсаў звычайна вельмі абмежаваны."</string>
- <!-- outdated translation 728454979946503926 --> <string name="permlab_movePackage" msgid="3289890271645921411">"Перамяшчэнне рэсурсаў прыкладання"</string>
- <!-- outdated translation 6323049291923925277 --> <string name="permdesc_movePackage" msgid="319562217778244524">"Дазваляе прыкладанню перамяшчаць рэсурсы прыкладання з унутранай памяці на знешні носьбіт і наадварот."</string>
+ <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"Дазваляе прыкладанням змяняць хуткасць курсору мышы або трэкпада ў любы час. Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"адправіць сігналы Linux да прыкладанняў"</string>
+ <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"Дазваляе прыкладанням запытваць адпраўку падаваемага сігнала для ўсiх пастаянных працэсаў."</string>
+ <string name="permlab_persistentActivity" msgid="8841113627955563938">"прымусіць прыкладанне працаваць заўсёды"</string>
+ <string name="permdesc_persistentActivity" msgid="4909910271316074418">"Дазваляе прыкладанням рабіць свае часткі пастаяннымі, каб сістэма не магла выкарыстоўваць iх для іншых прыкладанняў."</string>
+ <string name="permlab_deletePackages" msgid="184385129537705938">"выдаліць прыкладанні"</string>
+ <string name="permdesc_deletePackages" msgid="7411480275167205081">"Дазваляе прыкладанню выдаляць пакеты Android. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб выдаляць важныя прыкладанні."</string>
+ <string name="permlab_clearAppUserData" msgid="274109191845842756">"выдаліць дадзеныя іншых прыкладанняў"</string>
+ <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"Дазваляе прыкладанням выдаляць дадзеныя карыстальніка."</string>
+ <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"выдаліць кэш-памяць іншых прыкладанняў"</string>
+ <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Дазваляе прыкладанню выдаляць файлы кэш-памяці."</string>
+ <string name="permlab_getPackageSize" msgid="7472921768357981986">"вымерыць прастору для захоўвання прыкладання"</string>
+ <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Дазваляе прыкладанням атрымліваць яго код, дадзеныя і аб\'ём кэш-памяці"</string>
+ <string name="permlab_installPackages" msgid="2199128482820306924">"усталяваць прыкладанні непасрэдна"</string>
+ <string name="permdesc_installPackages" msgid="5628530972548071284">"Дазваляе прыкладанням ксталёўваць новыя або абноўленыя пакеты Android. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб дадаваць новыя прыкладаннi з дазволамі адвольнай ступені."</string>
+ <string name="permlab_clearAppCache" msgid="7487279391723526815">"выдаліць усе дадзеныя з кэш-памяці прыкладання"</string>
+ <string name="permdesc_clearAppCache" product="tablet" msgid="3523396284474042284">"Дазваляе прыкладанню вызваляць памяць планшэту, выдаляючы файлы ў каталогу кэш-памяці прыкладання. Як правіла, доступ да сістэмных працэсаў вельмі абмежаваны."</string>
+ <string name="permdesc_clearAppCache" product="default" msgid="5067988373366292186">"Дазваляе прыкладанням вызваляць памяць тэлефона, выдаляючы файлы з каталогу кэш-памяці прыкладання. Доступ да сістэмных працэсаў, як правіла, вельмі абмежаваны."</string>
+ <string name="permlab_movePackage" msgid="3289890271645921411">"перамясціць рэсурсы прыкладання"</string>
+ <string name="permdesc_movePackage" msgid="319562217778244524">"Дазваляе прыкладанням перамяшчаць рэсурсы прыкладання з унутраных на знешнія носьбіты і наадварот."</string>
<string name="permlab_readLogs" msgid="6615778543198967614">"чытаць канфідэнцыйныя дадзеныя дзённiка"</string>
- <!-- outdated translation 4077356893924755294 --> <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Дазваляе прыкладанням чытаць розныя файлы журналаў сістэмы. Такiм чынам можна выявiць агульную інфармацыю аб тым, што вы робіце з планшэтам, якая патэнцыйна змяшчае асабістыя або канфiдэнцыйныя звесткi."</string>
- <!-- outdated translation 4077356893924755294 --> <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Дазваляе прыкладанням чытаць розныя файлы журналаў сістэмы. Такiм чынам можна выявiць агульную інфармацыю аб тым, што вы робіце з планшэтам, якая патэнцыйна змяшчае асабістыя або канфiдэнцыйныя звесткi."</string>
+ <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Дазваляе прыкладанням счытваць розныя файлы сiстэмнай гiсторыi. Такiм чынам, можна выявiць агульную інфармацыю пра тое, што вы робіце з планшэтам, у тым ліку, магчыма, асабістыя або канфiдэнцыйныя звесткi."</string>
+ <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Дазваляе прыкладанню счытваць розныя сістэмныя файлы гiсторый. Гэта дазваляе атрымліваць агульную інфармацыю аб тым, як выкарыстоўваецца тэлефон, у тым ліку, магчыма, асабістую або прыватную інфармацыю."</string>
+ <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"для прайгравання выкарыстоўваць любы мультымедыйны дэкодэр"</string>
+ <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Дазваляе прыкладанням выкарыстоўваць любы ўсталяваны iнструмент для мультымедыйнага дэкадавання, каб прайграць."</string>
<string name="permlab_diagnostic" msgid="8076743953908000342">"чытаць/запісваць на дыягнастычныя рэсурсы"</string>
- <!-- outdated translation 3121238373951637049 --> <string name="permdesc_diagnostic" msgid="6608295692002452283">"Дазваляе прыкладанням счытваць і запісваць любы рэсурс, які належыць дыягнастычнай групе, напрыклад файлы распрацоўшчыка. Патэнцыйна гэта можа паўплываць на стабільнасць і бяспеку сістэмы. Гэта павінна выкарыстоўвацца ТОЛЬКІ для апаратнай дыягностыкі вытворцам або аператарам."</string>
- <!-- outdated translation 79425198834329406 --> <string name="permlab_changeComponentState" msgid="6335576775711095931">"уключаць або адключаць кампаненты прыкладання"</string>
- <!-- outdated translation 4647419365510068321 --> <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Дазваляе прыкладанню ўключаць ці адключаць кампанент іншага прыкладання. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта для адключэння важных магчымасцяў тэлефона. Трэба захоўваць асцярожнасць з гэтым дазволам, таму што гэта можа прывесці кампаненты прыкладання да непрыдатнасці, непаслядоўнасці або няўстойлівасці."</string>
- <!-- outdated translation 4647419365510068321 --> <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Дазваляе прыкладанню ўключаць ці адключаць кампанент іншага прыкладання. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта для адключэння важных магчымасцяў тэлефона. Трэба захоўваць асцярожнасць з гэтым дазволам, таму што гэта можа прывесці кампаненты прыкладання да непрыдатнасці, непаслядоўнасці або няўстойлівасці."</string>
- <!-- outdated translation 3393305202145172005 --> <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"выбіраць пажаданыя праграмы"</string>
- <!-- outdated translation 760008293501937546 --> <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Дазваляе прыкладанням змяняць вашы выбраныя прыкладанні. Гэта можа дазволіць шкоднасным прыкладанням незаўважна мяняць прыкладанні, якія запускаюцца, падмяняць існуючыя прыкладанні для збору вашых канфідэнцыйных дадзеных."</string>
+ <string name="permdesc_diagnostic" msgid="6608295692002452283">"Дазваляе прыкладанням счытваць і запісваць любы рэсурс, які належыць дыягнастычнай групе, напрыклад файлы распрацоўшчыка ў тэчцы /dev. Патэнцыйна гэта можа паўплываць на стабільнасць і бяспеку сістэмы. Гэта павінна выкарыстоўвацца ТОЛЬКІ для апаратнай дыягностыкі вытворцам або аператарам."</string>
+ <string name="permlab_changeComponentState" msgid="6335576775711095931">"уключыць або адключыць кампаненты прыкладання"</string>
+ <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Дазваляе прыкладанням змяняць вызначэнне таго, будзе ўключаны кампанент іншага прыкладання ці не. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта для адключэння важных магчымасцяў планшэта. З гэтым дазволам трэба быць уважлівым, бо можна прывесці кампаненты прыкладання ў непрыдатны, супярэчлівы або няўстойлівы стан."</string>
+ <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Дазваляе прыкладанням змяняць вызначэнне таго, будзе ўключаны кампанент іншага прыкладання ці не. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта для адключэння важных магчымасцяў тэлефона. З гэтым дазволам трэба быць уважлівым, бо можна прывесці кампаненты прыкладання ў непрыдатны, супярэчлівы або няўстойлівы стан."</string>
+ <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"усталяваць пажаданыя прыкладанні"</string>
+ <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Дазваляе прыкладанням змяняць вашы пажаданыя прыкладанні. Шкоднасныя прыкладанні могуць непрыкметна змяняць запушчаныя прыкладанні, падмяняючы існуючыя прыкладанні, каб збiраць вашы асабістыя дадзеныя."</string>
<string name="permlab_writeSettings" msgid="1365523497395143704">"змена глабальных параметраў сістэмы"</string>
- <!-- outdated translation 838789419871034696 --> <string name="permdesc_writeSettings" msgid="7775723441558907181">"Дазваляе прыкладанням змяняць налады сістэмы. Шкодныя прыкладанні могуць пашкодзіць канфігурацыю сістэмы."</string>
+ <string name="permdesc_writeSettings" msgid="7775723441558907181">"Дазваляе прыкладаннем змяняць дадзеныя налад сістэмы. Шкоднасныя прыкладанні могуць пашкодзіць канфігурацыю вашай сістэмы."</string>
<string name="permlab_writeSecureSettings" msgid="204676251876718288">"змяняць параметры бяспекі сістэмы"</string>
- <!-- outdated translation 5497873143539034724 --> <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Дазваляе прыкладанням мяняць параметры бяспекі сістэмы. Не выкарыстоўваецца звычайнымі прыкладаннямі."</string>
+ <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Дазваляе прыкладанням змяняць дадзеныя параметраў бяспекі сістэмы. Не для выкарыстання звычайнымі прыкладаннямі."</string>
<string name="permlab_writeGservices" msgid="2149426664226152185">"змяняць карту службаў Google"</string>
- <!-- outdated translation 6602362746516676175 --> <string name="permdesc_writeGservices" msgid="1287309437638380229">"Дазваляе прыкладанням змяняць карту службаў Google. Не для выкарыстання звычайнымі прыкладаннямі."</string>
+ <string name="permdesc_writeGservices" msgid="1287309437638380229">"Дазваляе прыкладанням змяняць карту службаў Google. Не для выкарыстання звычайнымі прыкладаннямі."</string>
<string name="permlab_receiveBootCompleted" msgid="7776779842866993377">"аўтаматычна запускаць пры загрузцы"</string>
- <!-- outdated translation 7530977064379338199 --> <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Дазваляе прыкладанням запускаць саміх сябе, як толькі сістэма цалкам загрузіцца. Гэта можа зрабіць загрузку планшэта больш павольнай і дазволіць прыкладанню запаволіць увесь планшэт, заўсёды працуючы."</string>
- <!-- outdated translation 7530977064379338199 --> <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Дазваляе прыкладанням запускаць саміх сябе, як толькі сістэма цалкам загрузіцца. Гэта можа зрабіць загрузку планшэта больш павольнай і дазволіць прыкладанню запаволіць увесь планшэт, заўсёды працуючы."</string>
+ <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Дазваляе прыкладанню самастойна запускацца, як толькі сістэма будзе цалкам загружана. Гэта можа павялічыць час запуску планшэту і дазволіць прыкладанню запаволіць увесь планшэт, прымушаючы яго працаваць заўсёды."</string>
+ <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Дазваляе прыкладанням самастойна запускацца, як толькі сістэма будзе цалкам запушчана. Гэта можа павялічыць час запуску тэлефону і дазволіць прыкладанню запаволіць увесь тэлефон, прымушаючы яго працаваць заўсёды."</string>
<string name="permlab_broadcastSticky" msgid="7919126372606881614">"адпраўляць нетэрмiновую рассылку"</string>
- <!-- outdated translation 6322249605930062595 --> <string name="permdesc_broadcastSticky" product="tablet" msgid="1181582512022829259">"Дазваляе прыкладанням адпраўляць прыдаткі да трансляцый, якія застаюцца пасля заканчэння трансляцыі. Шкоднасныя прыкладанні могуць зрабіць работу планшэта павольнай або нестабільнай, прымушаючы яго выкарыстоўваць занадта вялікі аб\'ём памяці."</string>
- <!-- outdated translation 6322249605930062595 --> <string name="permdesc_broadcastSticky" product="default" msgid="3287869131621514325">"Дазваляе прыкладанням адпраўляць прыдаткі да трансляцый, якія застаюцца пасля заканчэння трансляцыі. Шкоднасныя прыкладанні могуць зрабіць работу планшэта павольнай або нестабільнай, прымушаючы яго выкарыстоўваць занадта вялікі аб\'ём памяці."</string>
+ <string name="permdesc_broadcastSticky" product="tablet" msgid="1181582512022829259">"Дазваляе прыкладанням дасылаць далейшыя звязаныя перадачы, якія застаюцца пасля заканчэння асноўнай перадачы. Шкоднасныя прыкладанні могуць зрабіць працу планшэта павольнай або няўстойлівай, прымушаючы яго выкарыстоўваць занадта шмат памяці."</string>
+ <string name="permdesc_broadcastSticky" product="default" msgid="3287869131621514325">"Дазваляе прыкладанню дасылаць далейшыя звязаныя перадачы, якія застаюцца пасля заканчэння асноўнай перадачы. Шкоднасныя прыкладанні могуць зрабіць працу тэлефона павольнай або няўстойлівай, прымушаючы яго выкарыстоўваць занадта шмат памяці."</string>
<string name="permlab_readContacts" msgid="6219652189510218240">"чытаць кантактныя дадзеныя"</string>
- <!-- outdated translation 7596158687301157686 --> <string name="permdesc_readContacts" product="tablet" msgid="4028657556924039119">"Дазваляе прыкладанням счытваць усе кантакты (адрасы), якія захоўваюцца на планшэце. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб адпраўляць вашыя дадзеныя іншым асобам."</string>
- <!-- outdated translation 7596158687301157686 --> <string name="permdesc_readContacts" product="default" msgid="2032222056456498547">"Дазваляе прыкладанням счытваць усе кантакты (адрасы), якія захоўваюцца на планшэце. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб адпраўляць вашыя дадзеныя іншым асобам."</string>
+ <string name="permdesc_readContacts" product="tablet" msgid="4028657556924039119">"Дазваляе прыкладанням счытваць усе кантакты (адрасы), якія захоўваюцца на планшэце. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб адпраўляць дадзеныя іншым людзям."</string>
+ <string name="permdesc_readContacts" product="default" msgid="2032222056456498547">"Дазваляе прыкладанням счытваць усе кантакты (адрасы), якія захоўваюцца на вашым тэлефоне. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб адпраўляць дадзеныя іншым людзям."</string>
<string name="permlab_writeContacts" msgid="644616215860933284">"запісваць кантактныя дадзеныя"</string>
- <!-- outdated translation 7782689510038568495 --> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Дазваляе прыкладанням змяняць кантакты (адрасы), якія захоўваюцца на планшэце. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб сцерці або змяніць вашыя кантактныя дадзеныя."</string>
- <!-- outdated translation 7782689510038568495 --> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Дазваляе прыкладанням змяняць кантакты (адрасы), якія захоўваюцца на планшэце. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб сцерці або змяніць вашыя кантактныя дадзеныя."</string>
+ <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Дазваляе прыкладанням змяняць кантакты (адрасы), якія захоўваюцца на планшэце. Шкоднасныя прыкладанні могуць выкарыстоўваць гэтую магчымасць для выдалення або змены кантактных дадзеных."</string>
+ <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Дазваляе прыкладанням змяняць кантакты (адрасы), якія захоўваюцца на вашым тэлефоне. Шкоднасныя прыкладанні могуць выкарыстоўваць гэту магчымасць для выдалення або змены кантактных дадзеных."</string>
<string name="permlab_readProfile" msgid="6824681438529842282">"чытаць дадзеныя вашага профілю"</string>
- <!-- outdated translation 6335739730324727203 --> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Дазваляе прыкладанням счытваць персанальныя дадзеныя профілю, якія захоўваюцца на вашай прыладзе (напрыклад, вашыя імя і кантактную інфармацыю). Гэта азначае, што прыкладанне можа ідэнтыфікаваць вас і адправіць інфармацыю аб вашым профілі іншым асобам."</string>
+ <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Дазваляе прыкладанням счытваць асабістую інфармацыю ў профілях, якая захоўваецца на вашай прыладзе, напрыклад, ваша імя і кантактную інфармацыю. Гэта азначае, што прыкладанне можа ідэнтыфікаваць вас і адправіць інфармацыю вашага профілю трэцім асобам."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"увядзіце дадзеныя вашага профілю"</string>
- <!-- outdated translation 6431297330378229453 --> <string name="permdesc_writeProfile" product="default" msgid="4637366723793045603">"Дазваляе прыкладанням змяняць або дадаваць персанальныя дадзеныя профілю, якія захоўваюцца на вашай прыладзе (напрыклад, вашыя імя і кантактную інфармацыю). Гэта азначае, што іншыя прыкладанні могуць ідэнтыфікаваць вас і адправіць інфармацыю аб вашым профілі іншым асобам."</string>
+ <string name="permdesc_writeProfile" product="default" msgid="4637366723793045603">"Дазваляе прыкладанням змяняць ці дадаваць асабістую інфармацыю профіляў, захаваных на прыладзе, напрыклад ваша імя і кантактную інфармацыю. Такім чынам, іншыя прыкладанні могуць ідэнтыфікаваць вас і адпраўляць інфармацыю вашага профіля трэцім асобам."</string>
<string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"чытаць мой паток абнаўленняў"</string>
- <!-- outdated translation 1300659548047580769 --> <string name="permdesc_readSocialStream" product="default" msgid="3419050808547335320">"Дазваляе прыкладанням атрымліваць доступ да абнаўленняў вашых сяброў i сiнхранiзаваць гэтыя звесткi. З дапамогай шкоднасных прыкладанняў хтосьцi можа атрымаць доступ да вашай асабiстай перапiскi з сябрамi ў сацыяльных сетках."</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="3419050808547335320">"Дазваляе прыкладанням атрымліваць доступ і сінхранізаваць абнаўленнi ад вас i вашых сяброў у сацыяльных сетках. З дапамогай шкоднасных прыкладанняў хтосьцi можа чытаць вашу асабiстую перапiску з сябрамі ў сацыяльных сетках."</string>
<string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"запісаць у мой паток абнаўленняў"</string>
- <!-- outdated translation 8649864102944627446 --> <string name="permdesc_writeSocialStream" product="default" msgid="3496277176955721451">"Дазваляе прыкладанням публiкаваць абнаўленнi вашых сяброў з сацыяльных сетак. З дапамогай шкоднасных прыкладанняў хтосьцi можа падрабляць абнаўленнi ад вашых сяброў i, напрыклад, збiраць вашы канфiдэнцыйныя звесткi."</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="3496277176955721451">"Дазваляе прыкладанням адлюстроўваць абнаўленнi ад вашых сяброў у сацыяльных сетках. З дапамогай шкоднасных прыкладанняў хтосьцi можа прыкінуцца вашым сябрам, каб выкрасцi паролi i iншыя канфiдэнцыйныя звесткi."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"чытаць падзеі календара, а таксама прыватную інфармацыю"</string>
- <!-- outdated translation 5665520896961671949 --> <string name="permdesc_readCalendar" product="tablet" msgid="2338414551004122687">"Дазваляе прыкладанням счытваць усе падзеі календара, захаваныя на планшэце, у тым ліку падзеі сяброў і калегаў. З дапамогай гэтага дазволу шкоднасныя прыкладанні могуць здабываць персанальную інфармацыю з гэтых календароў без ведама ўладальнікаў."</string>
- <!-- outdated translation 5665520896961671949 --> <string name="permdesc_readCalendar" product="default" msgid="5693933067751827753">"Дазваляе прыкладанням счытваць усе падзеі календара, захаваныя на планшэце, у тым ліку падзеі сяброў і калегаў. З дапамогай гэтага дазволу шкоднасныя прыкладанні могуць здабываць персанальную інфармацыю з гэтых календароў без ведама ўладальнікаў."</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="2338414551004122687">"Дазваляе прыкладанню счытваць усе мерапрыемствы календара, захаваныя на планшэце, у тым ліку мерапрыемствы сяброў і калег. Шкоднасныя прыкладанні могуць атрымліваць асабістую інфармацыю з гэтых календароў без ведама ўладальнікаў."</string>
+ <string name="permdesc_readCalendar" product="default" msgid="5693933067751827753">"Дазваляе прыкладанню счытваць усе мерапрыемствы календара, захаваныя на вашым тэлефоне, у тым ліку мерапрыемствы сяброў і калег. Шкоднасныя прыкладаннi могуць атрымліваць асабістую інфармацыю з гэтых календароў без ведама ўладальнікаў."</string>
<string name="permlab_writeCalendar" msgid="8438874755193825647">"дадаваць ці змяняць падзеі календара і адпраўляць электронную пошту да гасцей без ведама ўладальнікаў"</string>
- <!-- outdated translation 5368129321997977226 --> <string name="permdesc_writeCalendar" msgid="2243771395254848873">"Дазваляе прыкладанням адпраўляць запрашэнні на мерапрыемствы ад iмя ўладальніка календара і дадаваць, выдаляць, змяняць падзеі, якія можна змяняць на прыладзе, у тым ліку падзеі сяброў або калегаў. З дапамогай гэтага дазволу шкоднасныя прыкладанні могуць рассылаць спам , які выглядае як прыбыўшы ад уладальніка календара, змяняць падзеі без ведама ўладальнікаў або дадаваць падробленыя падзеі."</string>
+ <string name="permdesc_writeCalendar" msgid="2243771395254848873">"Дазваляе прыкладанням адпраўляць запрашэнні на мерапрыемствы ў якасці ўладальніка календара і дадаваць, выдаляць, рэдагаваць мерапрыемствы, якія можна змяняць на прыладзе, у тым ліку мерапрыемствы сяброў або калег. Шкоднасныя прыкладанні могуць адпраўляць паведамленні-спам, якія зыходзяць ад уладальніка календара, змяняць мерапрыемствы без ведама ўладальнікаў або дадаваць падробленыя мерапрыемствы."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"макет крыніц месцазнаходжання для тэставання"</string>
- <!-- outdated translation 7648286063459727252 --> <string name="permdesc_accessMockLocation" msgid="7577931556422993949">"Стварыць макет крыніц месцазнаходжанняў для тэставання. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта для змены месцазнаходжання і/або статусу, атрыманых з рэальных сістэм пазіцыявання, напрыклад з GPS або сеткі правайдэраў мабільнай сувязі."</string>
+ <string name="permdesc_accessMockLocation" msgid="7577931556422993949">"Дазваляе прыкладанням ствараць макет крыніц месцазнаходжання для тэставання. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб змяняць месцазнаходжанне і/або статус, паведамляемы рэальнымі крыніцамі месцазнаходжання, напрыклад, GPS або правайдэрамі сеткі."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"доступ да дадатковых камандаў пастаўшчыка месцазнаходжання"</string>
- <!-- outdated translation 1948144701382451721 --> <string name="permdesc_accessLocationExtraCommands" msgid="6737736970602176133">"Доступ да дадатковых каманд пастаўшчыка месцазнаходжання. Шкоднасныя прыкладанні могуць карыстацца гэтым, каб умешвацца ў працу GPS і іншых крыніц месцазнаходжання."</string>
+ <string name="permdesc_accessLocationExtraCommands" msgid="6737736970602176133">"Дазваляе прыкладанням атрымліваць доступ да дадатковых каманд пастаўшчыка месца. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб умешвацца ў працу GPS або іншых крыніц месцазнаходжання."</string>
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"дазвол на ўсталяванне пастаўшчыка месцазнаходжання"</string>
- <!-- outdated translation 5449175116732002106 --> <string name="permdesc_installLocationProvider" msgid="1742577679350078373">"Стварыць макет крыніц месца для тэставання. Шкоднае праграмнае забеспячэнне можа выкарыстаць гэта, каб змяніць месцазнаходжанне і/або статус, атрыманы з рэальных сістэм пазіцыянавання, напрыклад з GPS або сеткі правайдэраў мабільнай сувязі, або можа вызначаць ваша месцазнаходжанне і перадаваць звесткі на вонкавыя прылады."</string>
+ <string name="permdesc_installLocationProvider" msgid="1742577679350078373">"Стварае макет крыніц месцазнаходжання для тэставання. Шкоднасныя прыкладаннi могуць выкарыстоўваць гэта, каб змяняць месцазнаходжанне і/або статус, які перадаюць рэальныя крыніцы месцазнаходжання, напрыклад GPS або пастаўшчыкі паслуг сеткі, ці кантраляваць вашае месцазнаходжанне і перадаваць яго на знешнюю крыніцу."</string>
<string name="permlab_accessFineLocation" msgid="8116127007541369477">"дакладнае (GPS) месцазнаходжанне"</string>
- <!-- outdated translation 243973693233359681 --> <string name="permdesc_accessFineLocation" product="tablet" msgid="5326423948268164934">"Доступ да дакладных крыніц месцаў (напрыклад, да глабальнай сістэмы пазіцыянавання на планшэце), калі такія маюцца. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб вызначыць, дзе вы знаходзіцеся, і могуць спажываць дадатковую магутнасць батарэі."</string>
- <!-- outdated translation 243973693233359681 --> <string name="permdesc_accessFineLocation" product="default" msgid="7130267914433890869">"Доступ да дакладных крыніц месцаў (напрыклад, да глабальнай сістэмы пазіцыянавання на планшэце), калі такія маюцца. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб вызначыць, дзе вы знаходзіцеся, і могуць спажываць дадатковую магутнасць батарэі."</string>
+ <string name="permdesc_accessFineLocation" product="tablet" msgid="5326423948268164934">"Дазволіць доступ да сістэм дакладнага пазіцыянавання на планшэце, напрыклад да GPS, там, дзе гэта магчыма. Шкоднасныя прыкладаннi могуць выкарыстоўваць гэта для вызначэння вашага месцазнаходжання, а таксама могуць дадаткова спажываць магутнасць акумулятару."</string>
+ <string name="permdesc_accessFineLocation" product="default" msgid="7130267914433890869">"Дазволіць доступ да сістэм дакладнага пазіцыянавання на тэлефоне, напрыклад да GPS, там, дзе гэта магчыма. Шкоднасныя прыкладаннi могуць выкарыстоўваць гэта для вызначэння вашага месцазнаходжання, а таксама могуць дадаткова спажываць магутнасць акумулятару."</string>
<string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"прыблізнае (заснаванае на дадзеных сеткі) месцазнаходжанне"</string>
- <!-- outdated translation 3704633168985466045 --> <string name="permdesc_accessCoarseLocation" product="tablet" msgid="5460726396318105483">"Доступ да грубых крыніц месца (напрыклад, да базы дадзеных сотавай сеткі), каб вызначыць прыблізнае месцазнаходжанне планшэту, калі такія маюцца. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб прыкладна вызначыць, дзе вы знаходзіцеся."</string>
- <!-- outdated translation 3704633168985466045 --> <string name="permdesc_accessCoarseLocation" product="default" msgid="8900795778057579522">"Доступ да грубых крыніц месца (напрыклад, да базы дадзеных сотавай сеткі), каб вызначыць прыблізнае месцазнаходжанне планшэту, калі такія маюцца. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб прыкладна вызначыць, дзе вы знаходзіцеся."</string>
+ <string name="permdesc_accessCoarseLocation" product="tablet" msgid="5460726396318105483">"Атрымаць доступ да прыблізных крыніц месцазнаходжання (напрыклад, да базы дадзеных сотавай сеткі), каб вызначыць прыблізнае месцазнаходжанне планшэта, калі такія маюцца. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб прыкладна вызначаць, дзе вы знаходзіцеся."</string>
+ <string name="permdesc_accessCoarseLocation" product="default" msgid="8900795778057579522">"Каб вызначыць прыблізнае месцазнаходжанне тэлефона, атрымайце доступ да прыблізных крыніц месцазнаходжання (напрыклад, да базы дадзеных сотавай сеткі), калі такія маюцца. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб прыкладна вызначаць, дзе вы."</string>
<string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"доступ да SurfaceFlinger"</string>
- <!-- outdated translation 6805241830020733025 --> <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Дазваляе прыкладанням выкарыстоўваць нізкаўзроўневыя функцыі SurfaceFlinger."</string>
+ <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Дазваляе прыкладанням выкарыстоўваць нізкаўзроўневыя функцыі SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"чытаць буфер кадраў"</string>
- <!-- outdated translation 7530020370469942528 --> <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Дазваляе прыкладанню чытаць змесціва буфера кадраў."</string>
+ <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Дазваляе прыкладанням счытваць змесціва буферу кадра."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"змяняць налады аудыё"</string>
- <!-- outdated translation 5793461287365991922 --> <string name="permdesc_modifyAudioSettings" msgid="7343951185408396919">"Дазваляе прыкладанням змяняць глабальныя налады аудыё, напрыклад гучнасць і маршрутызацыю."</string>
+ <string name="permdesc_modifyAudioSettings" msgid="7343951185408396919">"Дазваляе прыкладанням змяняць глабальныя налады аудыё, напрыклад гук і маршрутызацыю."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"запісваць аўдыё"</string>
- <!-- outdated translation 6493228261176552356 --> <string name="permdesc_recordAudio" msgid="2387462233976248635">"Дае прыкладанням доступ да шляха запісу аўдыё."</string>
+ <string name="permdesc_recordAudio" msgid="2387462233976248635">"Дазваляе прыкладанням атрымліваць доступ да шляху аудыёзапісу."</string>
<string name="permlab_camera" msgid="3616391919559751192">"рабіць фатаграфіі і відэа"</string>
- <!-- outdated translation 6004878235852154239 --> <string name="permdesc_camera" msgid="1507407407002492176">"Дазваляе прыкладанням здымаць фатаграфіі і відэа з дапамогай камеры. Гэта дазваляе прыкладанням ў любы час збіраць выявы, якія бачыць камера."</string>
+ <string name="permdesc_camera" msgid="1507407407002492176">"Дазваляе прыкладанням рабiць фатаграфіі і відэа з камеры. Гэта дазваляе прыкладанням у любы час збіраць выявы, якія \"бачыць\" камера."</string>
<string name="permlab_brick" product="tablet" msgid="2961292205764488304">"цалкам адключыць планшэт"</string>
<string name="permlab_brick" product="default" msgid="8337817093326370537">"цалкам адключаць тэлефон"</string>
- <!-- outdated translation 7379164636920817963 --> <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Дазваляе прыкладанням цалкам адключаць планшэт. Гэта вельмі небяспечна."</string>
- <!-- outdated translation 7379164636920817963 --> <string name="permdesc_brick" product="default" msgid="5788903297627283099">"Дазваляе прыкладанням цалкам адключаць планшэт. Гэта вельмі небяспечна."</string>
+ <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Дазваляе прыкладанням цалкам адключаць планшэт. Гэта вельмі небяспечна."</string>
+ <string name="permdesc_brick" product="default" msgid="5788903297627283099">"Дазваляе прыкладанням цалкам адключаць тэлефон. Гэта вельмі небяспечна."</string>
<string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"прымусовая перазагрузка планшэта"</string>
<string name="permlab_reboot" product="default" msgid="2898560872462638242">"прымусова перазагружаць тэлефон"</string>
- <!-- outdated translation 4555793623560701557 --> <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Дазваляе прыкладанню прымусова перазагрузіць планшэт."</string>
- <!-- outdated translation 4555793623560701557 --> <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Дазваляе прыкладанню прымусова перазагрузіць планшэт."</string>
+ <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Дазваляе прыкладанням прымусова перазагружаць планшэт."</string>
+ <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Дазваляе прыкладанням прымусова перазагружаць тэлефон."</string>
<string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"уключэнне і адключэнне файлавых сістэм"</string>
- <!-- outdated translation 6253263792535859767 --> <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Дазваляе прыкладанням уключаць і адключаць файлавыя сістэмы для падлучэння зменных назапашвальнікаў."</string>
+ <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Дазваляе прыкладанням падключаць і адключаць файлавыя сістэмы для здымных назапашвальнікаў."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"фарматаваць знешнія назапашвальнікі"</string>
- <!-- outdated translation 574060044906047386 --> <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Дазваляе прыкладанням фарматаваць здымныя назапашвальнiкi."</string>
+ <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Дазваляе прыкладанням фарматаваць здымны назапашвальнiк."</string>
<string name="permlab_asec_access" msgid="3411338632002193846">"атрымаць інфармацыю аб унутранай памяці"</string>
- <!-- outdated translation 8820326551687285439 --> <string name="permdesc_asec_access" msgid="3094563844593878548">"Дазваляе прыкладанню атрымліваць інфармацыю аб унутранай памяці."</string>
+ <string name="permdesc_asec_access" msgid="3094563844593878548">"Дазваляе прыкладанню атрымліваць інфармацыю пра ўнутраную памяць."</string>
<string name="permlab_asec_create" msgid="6414757234789336327">"стварыць унутраную памяць"</string>
- <!-- outdated translation 2621346764995731250 --> <string name="permdesc_asec_create" msgid="4558869273585856876">"Дазваляе прыкладанню ствараць унутраную памяць."</string>
+ <string name="permdesc_asec_create" msgid="4558869273585856876">"Дазваляе прыкладанням ствараць унутраную памяць."</string>
<string name="permlab_asec_destroy" msgid="526928328301618022">"знішчыць унутраную памяць"</string>
- <!-- outdated translation 2746706889208066256 --> <string name="permdesc_asec_destroy" msgid="7218749286145526537">"Дазваляе прыкладанню знішчаць унутраную памяць."</string>
- <!-- outdated translation 2456287623689029744 --> <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"падключыць/адключыць унутраную памяць"</string>
- <!-- outdated translation 5934375590189368200 --> <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Дазваляе прыкладанню падключаць/адключаць унутраную памяць."</string>
+ <string name="permdesc_asec_destroy" msgid="7218749286145526537">"Дазваляе прыкладанням выдаляць унутраную памяць."</string>
+ <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"падключэнне/адключэнне ўнутранай памяці"</string>
+ <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Дазваляе прыкладанням падлучаць i адлучаць унутраную памяць."</string>
<string name="permlab_asec_rename" msgid="7496633954080472417">"перайменаваць унутраную памяць"</string>
- <!-- outdated translation 2152829985238876790 --> <string name="permdesc_asec_rename" msgid="1794757588472127675">"Дазваляе праграмам змяняць імя ўнутранай памяці."</string>
+ <string name="permdesc_asec_rename" msgid="1794757588472127675">"Дазваляе прыкладанням змяняць імя ўнутранай памяці."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"кіраваць вібрацыяй"</string>
- <!-- outdated translation 2886677177257789187 --> <string name="permdesc_vibrate" msgid="6284989245902300945">"Дазваляе прыкладанням кіраваць вібрацыяй."</string>
+ <string name="permdesc_vibrate" msgid="6284989245902300945">"Дазваляе прыкладанням кіраваць вібрацыяй."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"кіраваць ўспышкай"</string>
- <!-- outdated translation 6433045942283802309 --> <string name="permdesc_flashlight" msgid="6522284794568368310">"Дазваляе прыкладанню кіраваць ліхтарыкам."</string>
+ <string name="permdesc_flashlight" msgid="6522284794568368310">"Дазваляе прыкладанню кіраваць ліхтарыкам."</string>
<string name="permlab_manageUsb" msgid="1113453430645402723">"кіраваць спісам пажаданых і дазволеных USB-прылад"</string>
- <!-- outdated translation 6148489202092166164 --> <string name="permdesc_manageUsb" msgid="7776155430218239833">"Дазваляе выкарыстоўваць праграму для кіравання спісам пажаданых і дазволеных USB-прылад."</string>
+ <string name="permdesc_manageUsb" msgid="7776155430218239833">"Дазваляе прыкладанням кіраваць наладамі і дазволамі USB-прылад."</string>
<string name="permlab_accessMtp" msgid="4953468676795917042">"рэалізаваць пратакол MTP"</string>
<string name="permdesc_accessMtp" msgid="6532961200486791570">"Дазваляе атрымаць доступ да драйвер ядра MTP, каб рэалізаваць USB-пратакол MTP."</string>
<string name="permlab_hardware_test" msgid="4148290860400659146">"тэставаць апаратнае забеспячэнне"</string>
- <!-- outdated translation 3668894686500081699 --> <string name="permdesc_hardware_test" msgid="6597964191208016605">"Дазваляе прыкладанням кіраваць рознымі перыферыйнымі прыладамі для тэставання абсталявання."</string>
+ <string name="permdesc_hardware_test" msgid="6597964191208016605">"Дазваляе прыкладанням кіраваць рознымі перыферыйнымі прыладамі для тэставання апаратнага абсталявання."</string>
<string name="permlab_callPhone" msgid="3925836347681847954">"непасрэдна набіраць тэлефонныя нумары"</string>
- <!-- outdated translation 3369867353692722456 --> <string name="permdesc_callPhone" msgid="6396463004110544744">"Дазваляе прыкладанням выклікаць тэлефонныя нумары без вашага ўмяшальніцтва. Шкодныя праграмы могуць рабіць непрадугледжаныя званкі за ваш кошт. Звярніце ўвагу: гэта не дазваляе прыкладанням выклікаць нумары экстраных службаў."</string>
+ <string name="permdesc_callPhone" msgid="6396463004110544744">"Дазваляе прыкладанням выклікаць тэлефонныя нумары без вашага ведама. Шкоднасныя прыкладанні могуць прывесці да з\'яўлення нечаканых выклікаў у вашым рахунку за паслугі тэлефоннай сувязі. Звярніце ўвагу, што гэты дазвол не дазваляе прыкладанню выклікаць экстраныя нумары."</string>
<string name="permlab_callPrivileged" msgid="4198349211108497879">"непасрэдна выклікаць любыя тэлефонныя нумары"</string>
- <!-- outdated translation 244405067160028452 --> <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Дазваляе прыкладанням тэлефанаваць на любы нумар, у тым лiку на нумары экстраных служб, без вашага ўмяшальніцтва. Шкодныя праграмы могуць рабіць непатрэбныя і незаконныя выклікі аварыйных службаў."</string>
+ <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Дазваляе прыкладанню тэлефанаваць на любы тэлефонны нумар, у тым лiку на экстраныя нумары, без вашага ведама. Шкоднасныя прыкладанні могуць рабіць непатрэбныя і незаконныя экстраныя выклікі."</string>
<string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"непасрэдна пачаць наладу CDMA-планшэта"</string>
<string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"непасрэдна запускаць налады тэлефона CDMA"</string>
- <!-- outdated translation 6457447676108355905 --> <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Дазваляе прыкладанням запускаць падрыхтоўку CDMA. Шкоднасныя прыкладанні могуць без неабходнасці пачаць падрыхтоўку CDMA"</string>
+ <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Дазваляе прыкладанням запускаць рэзервы CDMA. Шкоднасныя прыкладанні могуць запускаць залішнія рэзервы CDMA."</string>
<string name="permlab_locationUpdates" msgid="7785408253364335740">"кіраваць абвесткамі абнаўлення месцазнаходжання"</string>
- <!-- outdated translation 2300018303720930256 --> <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Дазваляе ўключаць/выключаць абнаўленнi апавяшчэнняў аб месцазнаходжанні праз радыё. Не для выкарыстання звычайнымі прыкладаннямі."</string>
+ <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Дазваляе прыкладанням уключаць i адключаць апавяшчэннi аб абнаўленні месцазнаходжання ад радыё. Не для выкарыстання звычайнымі прыкладаннямі."</string>
<string name="permlab_checkinProperties" msgid="7855259461268734914">"атрымліваць доступ да ўласцівасцяў праверкі"</string>
- <!-- outdated translation 7150307006141883832 --> <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Дазваляе счытваць і запісваць уласцівасці, загружаныя службай рэгістрацыі. Не выкарыстоўваецца звычайнымі прыкладаннямі."</string>
+ <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Дазваляе прыкладанням сытваць/запісваць доступ да ўласцівасцяў, запампаваных службай праверкі. Не для выкарыстання звычайнымі прыкладаннямі."</string>
<string name="permlab_bindGadget" msgid="776905339015863471">"выбіраць віджэты"</string>
- <!-- outdated translation 2098697834497452046 --> <string name="permdesc_bindGadget" msgid="8261326938599049290">"Дазваляе прыкладанням паведамляць сістэме, якія прыкладанні могуць выкарыстоўваць віджэты. З гэтым дазволам яны могуць даваць іншым прыкладанням доступ да персанальных дадзеных. Не выкарыстоўваецца звычайнымі прыкладаннямі."</string>
+ <string name="permdesc_bindGadget" msgid="8261326938599049290">"Дазваляе прыкладанням паведамляць сістэме, якая віджэты могуць быць выкарыстаны пэўнымі прыкладаннямі. Прыкладанне з гэтым дазволам можа прадастаўляць доступ да персанальных дадзеных іншым прыкладанням. Не для выкарыстання звычайнымі прыкладаннямі."</string>
<string name="permlab_modifyPhoneState" msgid="8423923777659292228">"змяняць стан тэлефона"</string>
- <!-- outdated translation 3302284561346956587 --> <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Дазваляе прыкладанням кіраваць тэлефоннымі функцыямі прылады. Прыкладанні з гэтым дазволам могуць пераключаць сеткі, уключаць і адключаць радыё на тэлефоне і г. д., нават не паведамляючы пра гэта."</string>
+ <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Дазваляе прыкладанням кіраваць тэлефоннымі функцыямі прылады. Прыкладанне з гэтым дазволам можа пераключаць сеткі, уключаць і выключаць радыё на тэлефоне і г. д., нават не паведамляючы пра гэта."</string>
<string name="permlab_readPhoneState" msgid="2326172951448691631">"чытаць стан тэлефона і ідэнтыфікацыйныя дадзеныя"</string>
- <!-- outdated translation 188877305147626781 --> <string name="permdesc_readPhoneState" msgid="5127767618743602782">"Дазваляе прыкладанням атрымліваць доступ да функцый тэлефона прылады. Прыкладанні з гэтым дазволам могуць вызначыць нумар тэлефона і серыйны нумар гэтага тэлефона, актыўнасць выкліка, нумар выкліканага абанента і таму падобнае."</string>
+ <string name="permdesc_readPhoneState" msgid="5127767618743602782">"Дазваляе прыкладанням атрымліваць доступ да тэлефонных функцый прылады. Прыкладанне з гэтым дазволам можа вызначаць нумар тэлефона і серыйны нумар гэтага тэлефона ці актыўны выклік, нумар выкліканага абанента і г. д."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"прадухіліць планшэт ад пераходу ў рэжым сну"</string>
<string name="permlab_wakeLock" product="default" msgid="573480187941496130">"забараняць тэлефону пераходзіць ў рэжым сну"</string>
- <!-- outdated translation 4032181488045338551 --> <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Дазваляе прыкладанню прадухіліць планшэт ад пераходу ў рэжым сну."</string>
- <!-- outdated translation 4032181488045338551 --> <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Дазваляе прыкладанню прадухіліць планшэт ад пераходу ў рэжым сну."</string>
+ <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Дазваляе прыкладанням прадухіляць пераход планшэта ў рэжым сну."</string>
+ <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Дазваляе прыкладанням прадухіляць тэлефон ад пераходу ў рэжым сну."</string>
<string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"Уключыць або выключыць планшэт"</string>
<string name="permlab_devicePower" product="default" msgid="4928622470980943206">"уключаць або выключаць тэлефон"</string>
- <!-- outdated translation 3853773100100451905 --> <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Дазваляе прыкладанням уключаць або выключаць планшэт"</string>
- <!-- outdated translation 3853773100100451905 --> <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Дазваляе прыкладанням уключаць або выключаць планшэт"</string>
+ <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Дазваляе прыкладанням уключаць ці адключаць планшэт."</string>
+ <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Дазваляе прыкладанням уключаць або адключаць тэлефон."</string>
<string name="permlab_factoryTest" msgid="3715225492696416187">"запусціць у рэжыме заводскага тэставання"</string>
<string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Запуск у якасці нізкаўзроўневага тэсты вытворцы, што дазваляе атрымаць поўны доступ да абсталявання планшэта. Даступна, толькі калі планшэт працуе ў рэжыме тэставання вытворцы."</string>
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Запусціць як нізкаўзроўневы тэст вытворцы, што дазваляе атрымаць поўны доступ да абсталявання тэлефона. Даступна, толькі калі прылада працуе ў рэжыме тэста вытворцы."</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"усталёўваць шпалеры"</string>
- <!-- outdated translation 6417041752170585837 --> <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Дазваляе прыкладанням усталёўваць сiстэмныя шпалеры."</string>
+ <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Дазваляе прыкладанням ксталёўваць сiстэмныя шпалеры."</string>
<string name="permlab_setWallpaperHints" msgid="3600721069353106851">"усталёўваць падказкі памераў шпалер"</string>
- <!-- outdated translation 6019479164008079626 --> <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Дазваляе прыкладанням задаваць падказкі па памеру сістэмных шпалераў."</string>
+ <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Дазваляе прыкладанням задаваць падказкі па памеры сістэмных шпалер."</string>
<string name="permlab_masterClear" msgid="2315750423139697397">"скідаць сістэму да завадскіх наладаў"</string>
- <!-- outdated translation 5033465107545174514 --> <string name="permdesc_masterClear" msgid="3665380492633910226">"Дазваляе прыкладанням рабіць поўнае скіданне да завадскіх налад. Пры гэтым выдаляюцца ўсе дадзеныя, канфігурацыя і ўсталяваныя прыкладанні."</string>
+ <string name="permdesc_masterClear" msgid="3665380492633910226">"Дазваляе прыкладанню цалкам скідваць сістэму да заводскіх налад, выдаляючы ўсе дадзеныя, налады і ўсталяваныя прыкладанні."</string>
<string name="permlab_setTime" msgid="2021614829591775646">"задаць час"</string>
- <!-- outdated translation 209693136361006073 --> <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Дазваляе прыкладанню змяняць час на планшэце."</string>
- <!-- outdated translation 209693136361006073 --> <string name="permdesc_setTime" product="default" msgid="1855702730738020">"Дазваляе прыкладанню змяняць час на планшэце."</string>
+ <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Дазваляе прыкладанням змяняць час на гадзінніку планшэта."</string>
+ <string name="permdesc_setTime" product="default" msgid="1855702730738020">"Дазваляе прыкладаннМ змяняць час на гадзінніку тэлефона."</string>
<string name="permlab_setTimeZone" msgid="2945079801013077340">"усталёўваць часавы пояс"</string>
- <!-- outdated translation 2522877107613885139 --> <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Дазваляе прыкладанню змяняць гадзінны пояс планшэта."</string>
- <!-- outdated translation 2522877107613885139 --> <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Дазваляе прыкладанню змяняць гадзінны пояс планшэта."</string>
+ <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Дазваляе прыкладанням змяняць гадзінны пояс планшэта."</string>
+ <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Дазваляе прыкладанню змяняць гадзінны пояс тэлефона."</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"выступаць у якасці службы AccountManagerService"</string>
- <!-- outdated translation 6056903274106394752 --> <string name="permdesc_accountManagerService" msgid="2684502137670299915">"Дазваляе прыкладанням тэлефанаваць на AccountAuthenticators"</string>
+ <string name="permdesc_accountManagerService" msgid="1948455552333615954">"Дазваляе прыкладанням тэлефанаваць на AccountAuthenticators."</string>
<string name="permlab_getAccounts" msgid="4549918644233460103">"выяўляць вядомыя ўліковыя запісы"</string>
- <!-- outdated translation 857622793935544694 --> <string name="permdesc_getAccounts" product="tablet" msgid="3238360555257773358">"Дазваляе прыкладанням атрымліваць спіс уліковых запісаў, якія ёсць на планшэце."</string>
- <!-- outdated translation 857622793935544694 --> <string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Дазваляе прыкладанням атрымліваць спіс уліковых запісаў, якія ёсць на планшэце."</string>
+ <string name="permdesc_getAccounts" product="tablet" msgid="3238360555257773358">"Дазваляе прыкладанню атрымліваць спіс уліковых запісаў, вядомых планшэту."</string>
+ <string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Дазваляе прыкладанню атрымліваць спіс уліковых запісаў, вядомых тэлефону."</string>
<string name="permlab_authenticateAccounts" msgid="3940505577982882450">"выступаць у якасці аўтэнтыфікатара ўліковага запісу"</string>
- <!-- outdated translation 4006839406474208874 --> <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Дазваляе прыкладанню выкарыстоўваць магчымасці сродку праверкі сапраўднасці ўліковых запісаў AccountManager, у тым ліку ствараць уліковыя запісы, атрымліваць і наладжваць паролі для іх."</string>
+ <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Дазваляе прыкладанням выкарыстоўваць магчымасці сродку праверкі сапраўднасці ўліковых запісаў AccountManager, у тым ліку ствараць уліковыя запісы, атрымліваць і наладжваць паролі для іх."</string>
<string name="permlab_manageAccounts" msgid="4440380488312204365">"кіраванне спісам уліковых запісаў"</string>
- <!-- outdated translation 8804114016661104517 --> <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Дазваляе прыкладанням выконваць такія аперацыі, як дадаванне і выдаленне ўліковых запісаў альбо выдаленне іх пароляў."</string>
+ <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Дазваляе прыкладанням выконваць даданне і выдаленне ўліковых запісаў або выдаленне іх пароляў."</string>
<string name="permlab_useCredentials" msgid="6401886092818819856">"выкарыстоўваць уліковыя дадзеныя ўліковага запісу"</string>
- <!-- outdated translation 7416570544619546974 --> <string name="permdesc_useCredentials" msgid="7984227147403346422">"Дазваляе прыкладанню запытваць ключы аўтэнтыфікацыі."</string>
+ <string name="permdesc_useCredentials" msgid="7984227147403346422">"Дазваляе прыкладанням запытваць ключы аўтэнтыфікаціі."</string>
<string name="permlab_accessNetworkState" msgid="6865575199464405769">"праглядаць стан сеткі"</string>
- <!-- outdated translation 558721128707712766 --> <string name="permdesc_accessNetworkState" msgid="479772796952547198">"Дазваляе прыкладанням праглядаць стан усіх сетак."</string>
+ <string name="permdesc_accessNetworkState" msgid="479772796952547198">"Дазваляе прыкладанню праглядаць стан усіх сетак."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"поўны доступ да інтэрнэту"</string>
- <!-- outdated translation 4593339106921772192 --> <string name="permdesc_createNetworkSockets" msgid="5963922297444265950">"Дазваляе прыкладанням ствараць сеткавыя злучальнікі."</string>
+ <string name="permdesc_createNetworkSockets" msgid="5963922297444265950">"Дазваляе прыкладанню ствараць сеткавыя сокеты."</string>
<string name="permlab_writeApnSettings" msgid="505660159675751896">"змяняць/перахопліваць сеткавыя налады і трафік"</string>
- <!-- outdated translation 2369786339323021771 --> <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Дазваляе прыкладанням змяняць налады сеткі, перахапляць і правяраць увесь сеткавы трафік, напрыклад для змены проксі і порта любога APN. Шкоднасныя прыкладанні могуць адсочваць, перанакіроўваць або змяняць сеткавыя пакеты без вашага ведама."</string>
+ <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Дазваляе прыкладанням змяняць налады сеткі, перахапляць і правяраць увесь сеткавы трафік, напрыклад для змены проксі-сервера і порта любога APN. Шкоднасныя прыкладанні могуць адсочваць, перанакіроўваць або змяняць сеткавыя пакеты без вашага ведама."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"змяніць падлучэнне да сеткі"</string>
- <!-- outdated translation 4199958910396387075 --> <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Дазваляе прыкладанням змяняць стан сеткавага падключэння."</string>
- <!-- outdated translation 2702121155761140799 --> <string name="permlab_changeTetherState" msgid="5952584964373017960">"Змяняць падлучэнне да мадэму"</string>
- <!-- outdated translation 8905815579146349568 --> <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Дазваляе прыкладанню змяняць стан прывязанага сеткавага падключэння."</string>
+ <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Дазваляе прыкладанням змяняць стан сеткавага падключэння."</string>
+ <string name="permlab_changeTetherState" msgid="5952584964373017960">"змяніць прывязку да падлучэння"</string>
+ <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Дазваляе прыкладанням змяняць стан прывязкі да сеткі."</string>
<string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"змяняць налады выкарыстання фонавых дадзеных"</string>
- <!-- outdated translation 1001482853266638864 --> <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Дазваляе прыкладанням мяняць налады фонавай перадачы дадзеных."</string>
+ <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Дазваляе прыкладанням змяняць налады выкарыстання зыходных дадзеных."</string>
<string name="permlab_accessWifiState" msgid="8100926650211034400">"праглядаць стан Wi-Fi"</string>
- <!-- outdated translation 485796529139236346 --> <string name="permdesc_accessWifiState" msgid="7770452658226256831">"Дазваляе прыкладанням праглядаць інфармацыю аб стане Wi-Fi."</string>
+ <string name="permdesc_accessWifiState" msgid="7770452658226256831">"Дазваляе прыкладанням праглядаць інфармацыю аб стане Wi-Fi."</string>
<string name="permlab_changeWifiState" msgid="7280632711057112137">"змяняць стан Wi-Fi"</string>
- <!-- outdated translation 2950383153656873267 --> <string name="permdesc_changeWifiState" msgid="7399961004537946240">"Дазваляе прыкладанням падключацца да кропак доступу Wi-Fi і адключацца ад іх, а таксама ўносіць змены ў наладжаныя сеткі Wi-Fi."</string>
+ <string name="permdesc_changeWifiState" msgid="7399961004537946240">"Дазваляе прыкладанням падлучацца і адключацца ад кропак доступу Wi-Fi і ўносіць змяненні ў наладжаныя сеткі Wi-Fi."</string>
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"дазваляе прыём Wi-Fi Multicast"</string>
- <!-- outdated translation 8199464507656067553 --> <string name="permdesc_changeWifiMulticastState" msgid="7633598524564320817">"Дазваляе прыкладанням атрымліваць пакеты, не напраўленыя непасрэдна на прыладу. Гэта можа быць карысна пры выяўленні блізкіх паслуг. Гэта выкарыстоўвае больш магутнасцяў, чым рэжым нешматадрасных перадач."</string>
- <!-- outdated translation 1092209628459341292 --> <string name="permlab_bluetoothAdmin" msgid="3606576270792236062">"кіраванне bluetooth"</string>
- <!-- outdated translation 3511795757324345837 --> <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Дазваляе прыкладанню наладжваць лакальны планшэт Bluetooth, а таксама вызначаць і падключацца да выдаленых прылад."</string>
- <!-- outdated translation 3511795757324345837 --> <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Дазваляе прыкладанню наладжваць лакальны планшэт Bluetooth, а таксама вызначаць і падключацца да выдаленых прылад."</string>
+ <string name="permdesc_changeWifiMulticastState" msgid="7633598524564320817">"Дазваляе прыкладаннямм атрымліваць пакеты, якія не былі адрасаваня непасрэдна вашай прыладзе. Гэта можа быць карысна пры выяўленні службаў, даступных побач. У гэтым рэжыме выкарыстоўваецца больш энергіі, чым у рэжыме аднаадраснай перадачы."</string>
+ <string name="permlab_bluetoothAdmin" msgid="3606576270792236062">"адмiнiстраванне Bluetooth"</string>
+ <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Дазваляе прыкладанням наладжваць лакальны планшэт Bluetooth, выяўляць і падлучаць выдаленыя прылады."</string>
+ <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Дазваляе прыкладанням наладжваць лакальны тэлефон Bluetooth, а таксама знаходзіць выдаленыя прылады i падлучацца да ix."</string>
+ <string name="permlab_accessWimaxState" msgid="1232061307208861588">"Прагляд стану WiMAX"</string>
+ <string name="permdesc_accessWimaxState" msgid="5914958077555177749">"Дазваляе прыкладанням праглядаць інфармацыю пра стан WiMAX."</string>
+ <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Змяніць стан WiMAX"</string>
+ <string name="permdesc_changeWimaxState" msgid="3328853825006455912">"Дазваляе прыкладанням падключацца і адключацца ад сеткі WiMAX."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"ствараць злучэнні Bluetooth"</string>
- <!-- outdated translation 4191941825910543803 --> <string name="permdesc_bluetooth" product="tablet" msgid="7007851048416363446">"Дазваляе прыкладанню праглядаць канфігурацыю лакальнага планшэта Bluetooth, а таксама ствараць і прымаць падключэнні да спалучаных прылад."</string>
- <!-- outdated translation 4191941825910543803 --> <string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Дазваляе прыкладанню праглядаць канфігурацыю лакальнага планшэта Bluetooth, а таксама ствараць і прымаць падключэнні да спалучаных прылад."</string>
+ <string name="permdesc_bluetooth" product="tablet" msgid="7007851048416363446">"Дазваляе прыкладанню праглядаць канфігурацыю лакальнага планшэту Bluetooth, а таксама здзяйсняць і прымаць злучэнні са спалучанымі прыладамі."</string>
+ <string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Дазваляе прыкладанню праглядаць канфігурацыю лакальнага тэлефона Bluetooth, а таксама здзяйсняць і прымаць злучэнні са спалучанымі прыладамі."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"кантроль Near Field Communication"</string>
- <!-- outdated translation 9171401851954407226 --> <string name="permdesc_nfc" msgid="7120611819401789907">"Дазваляе прыкладанню звязвацца з тэгамі, карткамі і чытачамі Near Field Communication (NFC)."</string>
+ <string name="permdesc_nfc" msgid="7120611819401789907">"Дазваляе прыкладаннzv спалучацца з тэгамі, картамі і счытваючымі прыладамі Near Field Communication (NFC)."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"адключаць блакаванне клавіятуры"</string>
- <!-- outdated translation 3189763479326302017 --> <string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Дазваляе прыкладанням адключаць блакіроўку клавіятуры і абарону паролем. Добры прыклад гэтага — адключэнне блакіроўкі тэлефона пры атрыманні ўваходнага выкліка тэлефона, паўторнае ўключэнне блакіроўкі клавіятуры, калі выклік завершаны."</string>
+ <string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Дазваляе прыкладанням адключаць блакаванне клавіятуры і любыя сродкі абароны, звязаныя з паролем. Прыкладам гэтага з\'яўляецца адключэнне тэлефонам блакавання клавіятуры пры атрыманні ўваходнага выкліку і паўторнае ўключэнне блакавання клавіятуры, калі выклік завершаны."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"чытаць параметры сінхранізацыі"</string>
- <!-- outdated translation 5315925706353341823 --> <string name="permdesc_readSyncSettings" msgid="5464056785274229278">"Дазваляе прыкладанням счытваць налады сінхранізацыі (напрыклад, ці ўключана сінхранізацыя для кантактаў)."</string>
+ <string name="permdesc_readSyncSettings" msgid="5464056785274229278">"Дазваляе прыкладанням змяняць налады сінхранізацыі, напрыклад, ці будзе сінхранізацыя ўключана для прыкладання People."</string>
<string name="permlab_writeSyncSettings" msgid="6297138566442486462">"запісваць параметры сінхранізацыі"</string>
- <!-- outdated translation 2498201614431360044 --> <string name="permdesc_writeSyncSettings" msgid="1466056564502117130">"Дазваляе прыкладанням мяняць налады сінхранізацыі, напрыклад дазвол сінхранізацыі для Кантактаў."</string>
+ <string name="permdesc_writeSyncSettings" msgid="1466056564502117130">"Дазваляе прыкладанню змяняць налады сінхранізацыі, напрыклад, ці будзе сінхранізацыя ўключана для прыкладання People."</string>
<string name="permlab_readSyncStats" msgid="7396577451360202448">"чытаць статыстыку сінхранізацыі"</string>
- <!-- outdated translation 7511448343374465000 --> <string name="permdesc_readSyncStats" msgid="3801971839939951678">"Дазваляе прыкладанням счытваць статыстыку сінхранізацыі, напрыклад гісторыю здзейсненых сінхранізацый."</string>
+ <string name="permdesc_readSyncStats" msgid="3801971839939951678">"Дазваляе прыкладанню счытваць статыстыку сінхранізацыі, напрыклад гісторыю здзейсненых сінхранізацый."</string>
<string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"чытаць падпісаныя каналы"</string>
- <!-- outdated translation 3622200625634207660 --> <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Дазваляе прыкладанням атрымліваць інфармацыю аб сінхранізацыі бягучых каналаў."</string>
+ <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Дазваляе прыкладанням атрымліваць інфармацыю пра каналы, якія сінхранізуюцца ў бягучы момант."</string>
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"запісваць каналы, на якія ёсць падпіска"</string>
- <!-- outdated translation 8121607099326533878 --> <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Дазваляе прыкладанням змяняць бягучыя сінхранізуемыя каналы. Гэта можа дазволіць шкоднасным прыкладанням змяняць сінхранізаваныя каналы."</string>
- <!-- outdated translation 432535716804748781 --> <string name="permlab_readDictionary" msgid="8410247960433376352">"чытаць карыстальніцкі слоўнік"</string>
- <!-- outdated translation 1082972603576360690 --> <string name="permdesc_readDictionary" msgid="8977815988329283705">"Дазваляе прыкладанням счытваць любыя прыватныя словы, імёны і фразы, якія карыстальнік можа захоўваць у карыстальніцкім слоўніку."</string>
- <!-- outdated translation 6703109511836343341 --> <string name="permlab_writeDictionary" msgid="2296383164914812772">"пісаць у карыстальніцкі слоўнік"</string>
- <!-- outdated translation 2241256206524082880 --> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Дазваляе прыкладанням запісваць новыя словы ў слоўнік карыстальніка."</string>
+ <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Дазваляе прыкладанням змяняць бягучыя каналы сінхранізавання. Шкоднасныя прыкладанні могуць змяняць вашы каналы сінхранізацыi."</string>
+ <string name="permlab_readDictionary" msgid="8410247960433376352">"чытаць карыстальніцкі слоўнік"</string>
+ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Дазваляе прыкладанню счытваць любыя прыватныя словы, імёны і фразы, якія карыстальнік можа захоўваць у карыстальніцкім слоўніку."</string>
+ <string name="permlab_writeDictionary" msgid="2296383164914812772">"запісаць у карыстальніцкі слоўнік"</string>
+ <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Дазваляе прыкладанням запісваць новыя словы ў карыстальніцкі слоўнік."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"змяніць/выдаліць змесціва USB-назапашвальнiка"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"змяняць/выдаляць змесціва SD-карты"</string>
- <!-- outdated translation 6594393334785738252 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дазваляе прыкладанню запісваць дадзеныя на USB-назапашвальнiк."</string>
- <!-- outdated translation 6594393334785738252 --> <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Дазваляе прыкладанню запісваць дадзеныя на USB-назапашвальнiк."</string>
+ <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дазваляе прыкладаням выконваць запіс ва USB-назапашвальнік."</string>
+ <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Дазваляе прыкладанням запісваць на SD-карту."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"змяніць/выдаліць унутраныя носьбіты змесціва"</string>
- <!-- outdated translation 8232008512478316233 --> <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"Дазваляе прыкладанням змяняць змесціва ўнутранага сховішча інфармацыі."</string>
+ <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"Дазваляе прыкладанням змяняць змесціва ўнутранай памяці."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"доступ да файлавай сістэмы кэша"</string>
- <!-- outdated translation 1624734528435659906 --> <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Дазваляе прыкладанням чытаць і запісваць дадзеныя ў файлавую сістэму кэша."</string>
+ <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Дазваляе прыкладанню счытваць і выконваць запіс у файлавую сістэму кэш-памяці."</string>
<string name="permlab_use_sip" msgid="5986952362795870502">"рабіць/прымаць iнтэрнэт-выклікі"</string>
- <!-- outdated translation 6320376185606661843 --> <string name="permdesc_use_sip" msgid="4717632000062674294">"Дазваляе прыкладанню выкарыстоўваць службу SIP, каб рабіць/прымаць iнтэрнэт-выклікі."</string>
+ <string name="permdesc_use_sip" msgid="4717632000062674294">"Дазваляе прыкладанням выкарыстоўваць службу SIP, каб прымаць/рабіць Інтэрнэт-выклікі."</string>
<string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"чытаць дадзеныя выкарыстання сеткі"</string>
- <!-- outdated translation 6040738474779135653 --> <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"Дазваляе прыкладанням чытаць дадзеныя дзённiка выкарыстання для пэўных сетак і прыкладанняў."</string>
+ <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"Дазваляе прыкладанню счытваць дадзеныя аб гісторыі выкарыстання сеткі для пэўных сетак і прыкладанняў."</string>
<string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"кіраванне палітыкай сеткі"</string>
- <!-- outdated translation 3723795285132803958 --> <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Дазваляе прыкладанням кіраваць сеткавымі палітыкамі і вызначаць правілы для прыкладанняў."</string>
+ <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Дазваляе прыкладаннм кіраваць сеткавымі палітыкамі і вызначаць правілы пэўных прыкладанняў."</string>
<string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"змяніць улік выкарыстання сеткі"</string>
- <!-- outdated translation 8702285686629184404 --> <string name="permdesc_modifyNetworkAccounting" msgid="8553240749784321765">"Дазваляе мадыфікаваць улік выкарыстання сеткі прыкладаннямі. Не для выкарыстання звычайнымі прыкладаннямі."</string>
+ <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Дазваляе прыкладанням змяняць метад уліку выкарыстання сеткі прыкладаннямі. Не для выкарыстання звычайнымі прыкладаннямі."</string>
<string name="policylab_limitPassword" msgid="4497420728857585791">"Устанавіць правілы паролю"</string>
- <string name="policydesc_limitPassword" msgid="9083400080861728056">"Кіраванне даўжынёй і колькасцю знакаў на экране разблакоўкі пароляў"</string>
+ <string name="policydesc_limitPassword" msgid="3252114203919510394">"Кіраванне даўжынёй і колькасцю знакаў у паролі разблакоўкі экрана."</string>
<string name="policylab_watchLogin" msgid="914130646942199503">"Сачыць за спробамі разблакоўкі экрана"</string>
- <!-- outdated translation 933601759466308092 --> <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Сачыць за колькасцю няправільных спроб уводу пароляў пры разблакоўцы экрана і блакаваць планшэт або сціраць ўсе дадзеныя на планшэце, калі ўводзіцца занадта шмат няправільных пароляў"</string>
- <!-- outdated translation 933601759466308092 --> <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Сачыць за колькасцю няправільных спроб уводу пароляў пры разблакоўцы экрана і блакаваць планшэт або сціраць ўсе дадзеныя на планшэце, калі ўводзіцца занадта шмат няправільных пароляў"</string>
+ <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Сачыць за колькасцю няправільных набраных пароляў падчас разблакоўкі экрана і блакаваць планшэт або сціраць усе дадзеныя на ім, калі няправільны пароль набраны занадта шмат разоў."</string>
+ <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Сачыць за колькасцю няправільных набраных пароляў падчас разблакоўкі экрана і блакаваць тяэлефон або сціраць усе дадзеныя на ім, калі набрана занадта шмат няправільных пароляў."</string>
<string name="policylab_resetPassword" msgid="2620077191242688955">"Змяненне паролю разблакоўкі экрана"</string>
- <string name="policydesc_resetPassword" msgid="5391240616981297361">"Змяненне паролю разблакоўкі экрана"</string>
+ <string name="policydesc_resetPassword" msgid="605963962301904458">"Змяніць пароль разблакоўкі экрана."</string>
<string name="policylab_forceLock" msgid="2274085384704248431">"Заблакаваць экран"</string>
- <string name="policydesc_forceLock" msgid="5696964126226028442">"Кіраванне часам і спосабам блакоўкі экрана"</string>
+ <string name="policydesc_forceLock" msgid="1141797588403827138">"Кіраванне часам і спосабам блакавання экрана"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Сцерці ўсе дадзеныя"</string>
- <string name="policydesc_wipeData" product="tablet" msgid="314455232799486222">"Сцерці дадзеныя планшэта без папярэджання, выканаўшы скід налад дадзеных"</string>
- <string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"Сцерці дадзеныя тэлефона без папярэджання, выканаўшы скід налад дадзеных"</string>
+ <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Выдаліць дадзеныя з планшэта без папярэджання, выканаўшы скід налад."</string>
+ <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Выдаліць дадзеныя з тэлефона без папярэджання, выканаўшы скід налад."</string>
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Усталяваць глабальны проксі прылады"</string>
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Усталяваць глабальны проксі-cервер прылады, які будзе выкарыстоўвацца, калі палітыка актыўная. Толькі першы адміністратар прылады ўсталёўвае эфектыўныя глабальныя проксі-серверы."</string>
<string name="policylab_expirePassword" msgid="885279151847254056">"Нал. тэрм. дз. пар. блак. экр."</string>
- <string name="policydesc_expirePassword" msgid="4844430354224822074">"Кантраляваць, як часта трэба мяняць пароль для блакавання экрана"</string>
+ <string name="policydesc_expirePassword" msgid="1729725226314691591">"Кіраваць частатой змены паролю для блакавання экрана."</string>
<string name="policylab_encryptedStorage" msgid="8901326199909132915">"Усталяваць шыфраванне сховішча."</string>
- <!-- outdated translation 2504984732631479399 --> <string name="policydesc_encryptedStorage" msgid="8877192718681120469">"Патрабаваць шыфраванне захаваных дадзеных прыкладання"</string>
+ <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Запыт на шыфраванне захаваных дадзеных прыкладанняў."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Адключыць камеры"</string>
- <string name="policydesc_disableCamera" msgid="5680054212889413366">"Забарона выкарыстання ўсіх камер прылады"</string>
+ <string name="policydesc_disableCamera" msgid="2306349042834754597">"Забараніць выкарыстанне ўсіх камер прылады."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Галоўная старонка"</item>
<item msgid="869923650527136615">"Мабільны"</item>
@@ -635,14 +644,14 @@
<string name="sipAddressTypeHome" msgid="6093598181069359295">"Галоўная старонка"</string>
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Працоўны"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"Іншае"</string>
- <!-- outdated translation 3731488827218876115 --> <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Увядзіце PIN-код"</string>
- <!-- outdated translation 5965173481572346878 --> <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Увядзіце PUK і новы PIN-код"</string>
+ <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Увядзіце PIN-код"</string>
+ <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Увядзіце PUK-код і новы PIN-код"</string>
<string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK"</string>
- <!-- outdated translation 2987350144349051286 --> <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Новы PIN-код"</string>
- <!-- outdated translation 7906561917570259833 --> <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Дакраніцеся, каб увесці пароль"</font></string>
- <!-- outdated translation 9138158344813213754 --> <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Увядзіце пароль для разблакавання"</string>
- <!-- outdated translation 638347075625491514 --> <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Увядзіце PIN-код для разблакоўкі"</string>
- <string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Няправільны PIN-код"</string>
+ <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Новы PIN-код"</string>
+ <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Дакраніцеся, каб увесці пароль"</font></string>
+ <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Увядзіце пароль для разблакавання"</string>
+ <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Каб разблакаваць, увядзіце PIN-код"</string>
+ <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Няправільны PIN-код."</string>
<string name="keyguard_label_text" msgid="861796461028298424">"Каб разблакаваць, націсніце \"Меню\", затым 0."</string>
<string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Нумар экстранай службы"</string>
<string name="lockscreen_carrier_default" msgid="8963839242565653192">"Не абслугоўваецца"</string>
@@ -653,8 +662,9 @@
<string name="lockscreen_emergency_call" msgid="5347633784401285225">"Экстраны выклік"</string>
<string name="lockscreen_return_to_call" msgid="5244259785500040021">"Вярнуцца да выкліку"</string>
<string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Правільна!"</string>
- <!-- outdated translation 4817583279053112312 --> <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Паспрабуйце яшчэ раз"</string>
- <!-- outdated translation 6237443657358168819 --> <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Паспрабуйце яшчэ раз"</string>
+ <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Паспрабуйце яшчэ раз"</string>
+ <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Паўтарыце спробу"</string>
+ <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Перавышана максімальная колькасць спроб разблакоўкі праз Фэйскантроль"</string>
<string name="lockscreen_plugged_in" msgid="8057762828355572315">"Зарадка, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_charged" msgid="4938930459620989972">"Зараджаны."</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
@@ -662,9 +672,9 @@
<string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Няма SIM-карты."</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Няма SIM-карты ў планшэце."</string>
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"У тэлефоне няма SIM-карты."</string>
- <!-- outdated translation 8874620818937719067 --> <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Устаўце SIM-карту."</string>
- <!-- outdated translation 7138450788301444298 --> <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-карта адсутнічае ці не чытаецца. Устаўце SIM-карту."</string>
- <!-- outdated translation 1631853574702335453 --> <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Вашая SIM-картка поўнасцю адключаная."\n"Звярніцеся да пастаўшчыка паслуг мабільнай сувязі, каб атрымаць іншую SIM-карту."</string>
+ <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Усталюйце SIM-карту."</string>
+ <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-карта адсутнічае ці не чытаецца. Устаўце SIM-карту."</string>
+ <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Ваша SIM-карта была адключана назаўсёды."\n" Звяжыцеся з аператарам бесправадной сувязі, каб атрымаць іншую SIM-карту."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Кнопка папярэдняй кампазiцыi"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Кнопка наступнай кампазiцыi"</string>
<string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Кнопка паўзы"</string>
@@ -673,19 +683,14 @@
<string name="emergency_calls_only" msgid="6733978304386365407">"Толькі экстраныя выклікі"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Сетка заблакаваная"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-карта заблакавана PUK-кодам."</string>
- <!-- outdated translation 635967534992394321 --> <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Глядзіце Інструкцыю карыстальніка або звяжыцеся са службай падтрымкі."</string>
+ <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Глядзіце \"Інструкцыю для карыстальніка\" або звяжыцеся са службай тэхнiчнай падтрымкі."</string>
<string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM-карта заблакаваная."</string>
<string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Разблакаванне SIM-карты..."</string>
- <!-- no translation found for lockscreen_too_many_failed_attempts_dialog_message (6481623830344107222) -->
- <skip />
- <!-- no translation found for lockscreen_too_many_failed_password_attempts_dialog_message (2725973286239344555) -->
- <skip />
- <!-- no translation found for lockscreen_too_many_failed_pin_attempts_dialog_message (6216672706545696955) -->
- <skip />
- <!-- no translation found for lockscreen_failed_attempts_almost_glogin (9191611984625460820) -->
- <skip />
- <!-- no translation found for lockscreen_failed_attempts_almost_glogin (2590227559763762751) -->
- <skip />
+ <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Вы няправільна ўвялі графічны ключ разблакавання пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Паўтарыце спробу праз наступную колькасць секунд: <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+ <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Вы няправільна ўвялі пароль пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Паўтарыце спробу праз наступную колькасць секунд: <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+ <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Вы няправільна ўвялі PIN-код пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Паўтарыце спробу праз наступную колькасць секунд: <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Вы няправільна ўвялі графічны ключ разблакавання пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакаваць планшэт з дапамогай уваходу ў Google."\n\n" Паўтарыце спробу праз наступную колькасць секунд: <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Вы няправільна ўвялі графічны ключ разблакавання пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакаваць тэлефон з дапамогай уваходу ў Google."\n\n" Паўтарыце спробу праз наступную колькасць секунд: <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Вы няправільна спрабавалі разблакаваць планшэт некалькi разоў (<xliff:g id="NUMBER_0">%d</xliff:g>). Пасля яшчэ некалькiх спробаў (<xliff:g id="NUMBER_1">%d</xliff:g>) ён будзе скінуты да заводскіх налад i карыстальнiцкiя дадзеныя будуць згубленыя."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Вы няправільна спрабавалі разблакаваць планшэт некалькi разоў (<xliff:g id="NUMBER_0">%d</xliff:g>). Пасля яшчэ некалькiх спробаў (<xliff:g id="NUMBER_1">%d</xliff:g>) ён будзе скінуты да заводскіх налад i карыстальнiцкiя дадзеныя будуць згубленыя."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Вы няправільна спрабавалі разблакаваць планшэт некалькi разоў (<xliff:g id="NUMBER">%d</xliff:g>). Цяпер ён будзе скінуты да заводскіх налад."</string>
@@ -693,14 +698,14 @@
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Паўтарыце спробу праз <xliff:g id="NUMBER">%d</xliff:g> с."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Забылі ўзор?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Разблакаванне ўліковага запісу"</string>
- <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"Занадта шмат спробаў узору!"</string>
- <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Каб разблакаваць, увайдзіце праз уліковы запіс Google"</string>
+ <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Занадта шмат спроб паўтарыць шаблон!"</string>
+ <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Каб разблакаваць, увайдзіце ў свой уліковы запіс Google."</string>
<string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Імя карыстальніка (электронная пошта)"</string>
<string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Пароль"</string>
<string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Увайсці"</string>
<string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Няправільнае імя карыстальніка ці пароль."</string>
- <string name="lockscreen_glogin_account_recovery_hint" msgid="8253152905532900548">"Забыліся на імя карыстальніка або пароль?"\n"Наведайце"<b>"google.com/accounts/recovery"</b></string>
- <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Праверка..."</string>
+ <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"Забыліся на імя карыстальніка або пароль?"\n"Наведайце "<b>"google.com/accounts/recovery"</b></string>
+ <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"Праверка..."</string>
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Разблакаваць"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Гук уключаны"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Гук выключаны"</string>
@@ -717,14 +722,13 @@
<string name="factorytest_not_system" msgid="4435201656767276723">"Дзеянне FACTORY_TEST падтрымліваецца толькі для пакетаў, усталяваных на шляху /system/app."</string>
<string name="factorytest_no_action" msgid="872991874799998561">"Пакет, які выконвае дзеянне FACTORY_TEST, не знойдзены."</string>
<string name="factorytest_reboot" msgid="6320168203050791643">"Перазагрузіць"</string>
- <string name="js_dialog_title" msgid="8143918455087008109">"Старонка з адрасам \"<xliff:g id="TITLE">%s</xliff:g>\" кажа:"</string>
+ <string name="js_dialog_title" msgid="1987483977834603872">"На старонцы з адрасам <xliff:g id="TITLE">%s</xliff:g> вызначана:"</string>
<string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
- <!-- no translation found for js_dialog_before_unload (730366588032430474) -->
- <skip />
+ <string name="js_dialog_before_unload" msgid="730366588032430474">"Пакiнуць гэту старонку?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Націсніце \"OK\", каб працягнуць, або \"Адмена\", каб застацца на бягучай старонцы."</string>
<string name="save_password_label" msgid="6860261758665825069">"Пацвердзіць"</string>
- <!-- outdated translation 1068216937244567247 --> <string name="double_tap_toast" msgid="2729045387923870404">"Падказка: націсніце двойчы, каб павялічыць або паменшыць."</string>
- <string name="autofill_this_form" msgid="1272247532604569872">"Аўтазапаўненне"</string>
- <string name="setup_autofill" msgid="8154593408885654044">"Усталёўка аўтазапаўнення"</string>
+ <string name="double_tap_toast" msgid="4595046515400268881">"Падказка: двойчы націсніце, каб павялічыць або паменшыць."</string>
+ <string name="autofill_this_form" msgid="4616758841157816676">"Аўтазапаўненне"</string>
+ <string name="setup_autofill" msgid="7103495070180590814">"Усталяванне аўтазапаўнення"</string>
<string name="autofill_address_name_separator" msgid="2504700673286691795">" "</string>
<string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
<string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
@@ -742,25 +746,25 @@
<string name="autofill_area" msgid="3547409050889952423">"Плошча"</string>
<string name="autofill_emirate" msgid="2893880978835698818">"Эмірат"</string>
<string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"чытаць гісторыю браўзэра і закладак"</string>
- <!-- outdated translation 4981489815467617191 --> <string name="permdesc_readHistoryBookmarks" msgid="4577476392604595921">"Дазваляе прыкладанням счытваць усе URL, якія наведвалiся з браўзэра, а таксама ўсе закладкi."</string>
+ <string name="permdesc_readHistoryBookmarks" msgid="4577476392604595921">"Дазваляе прыкладанням счытваць усе URL, якія наведвалiся з браўзэра, а таксама ўсе закладкi браўзэра."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"пісаць гісторыю браўзэра і закладак"</string>
- <!-- outdated translation 7193514090469945307 --> <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="1757103804824209530">"Дазваляе прыкладанням змяняць гісторыю браўзэра або закладкі, якія захоўваюцца на планшэце. Шкоднасныя прыкладанні могуць выкарыстоўваць гэтую магчымасць, каб выдаляць або змяняць дадзеныя вашага браўзэра."</string>
- <!-- outdated translation 7193514090469945307 --> <string name="permdesc_writeHistoryBookmarks" product="default" msgid="6693764355720719197">"Дазваляе прыкладанням змяняць гісторыю браўзэра або закладкі, якія захоўваюцца на планшэце. Шкоднасныя прыкладанні могуць выкарыстоўваць гэтую магчымасць, каб выдаляць або змяняць дадзеныя вашага браўзэра."</string>
+ <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="1757103804824209530">"Дазваляе прыкладанням змяняць гісторыю браўзэра або закладкі, якія захоўваюцца на планшэце. Шкоднасныя прыкладанні могуць выкарыстоўваць гэту магчымасць для выдалення або змены дадзеных вашага браўзэра."</string>
+ <string name="permdesc_writeHistoryBookmarks" product="default" msgid="6693764355720719197">"Дазваляе прыкладанням змяняць гісторыю браўзэра або закладак, захаваных у тэлефоне. Шкоднасныя прыкладанні могуць выкарыстоўваць гэту магчымасць для выдалення або змены дадзеных вашага браўзэра."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"Усталяваць сігнал у будзільніку"</string>
- <!-- outdated translation 5966966598149875082 --> <string name="permdesc_setAlarm" msgid="316392039157473848">"Дазваляе прыкладанням задаваць сігнал усталяванага прыкладання будзільніка. Пэўныя прыкладанні будзільніка не могуць рэалізаваць гэтую функцыю."</string>
+ <string name="permdesc_setAlarm" msgid="316392039157473848">"Дазваляе прыкладанню ўсталёўваць сігнал на ўсталяваным прыкладанні будзільніка. Пэўныя прыкладанні будзільніка не могуць рэалізоўваць гэтую магчымасць."</string>
<string name="permlab_addVoicemail" msgid="5525660026090959044">"дадаць галасавое паведамленне"</string>
- <!-- outdated translation 4828507394878206682 --> <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Дазваляе праграме дадаваць паведамленні ў паштовую скрыню галасавых паведамленняў."</string>
- <!-- outdated translation 4715212655598275532 --> <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Змяніць дазволы геапазіцыянавання для браўзэра"</string>
- <!-- outdated translation 4011908282980861679 --> <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Дазваляе прыкладанням змяняць дазволы геалакацыі браўзэра. Шкодныя прыкладанні могуць карыстацца гэтым, каб дазваляць адпраўку інфармацыі аб месцазнаходжанні адвольным вэб-сайтам."</string>
+ <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Дазваляе прыкладанням дадаваць паведамленні ў вашу скрыню галасавой пошты."</string>
+ <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"змяніць дазволы геапазіцыянавання для браўзэра"</string>
+ <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Дазваляе прыкладанням змяняць дазволы геалакацыі браўзэра. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб дазваляць адпраўку інфармацыі аб месцазнаходжанні выпадковым вэб-сайтам."</string>
<string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"верыфікаваць пакеты"</string>
- <!-- outdated translation 6033195477325381106 --> <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"Дазваляе прыкладанням правяраць магчымасць усталёўкі пакету."</string>
+ <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"Дазваляе прыкладанням правяраць магчымасць усталявання пакету."</string>
<string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"прывязаць да верыфікатару пакету"</string>
- <!-- outdated translation 2409521927385789318 --> <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"Дазваляе ўладальніку рабіць запыты верыфікатараў пакету. Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"Дазваляе ўладальніку рабіць запыты верыфікатараў пакету. Не патрабуецца для звычайных прыкладанняў."</string>
<string name="save_password_message" msgid="767344687139195790">"Вы хочаце, каб браўзэр запомніў гэты пароль?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Не цяпер"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Запомніць"</string>
<string name="save_password_never" msgid="8274330296785855105">"Ніколі"</string>
- <!-- outdated translation 5661861460947222274 --> <string name="open_permission_deny" msgid="7374036708316629800">"У вас няма дазволу адкрываць гэтую старонку."</string>
+ <string name="open_permission_deny" msgid="7374036708316629800">"У вас няма дазволу на адкрыццё гэтай старонкі."</string>
<string name="text_copied" msgid="4985729524670131385">"Тэкст скапіяваны ў буфер абмену."</string>
<string name="more_item_label" msgid="4650918923083320495">"Больш"</string>
<string name="prepend_shortcut_label" msgid="2572214461676015642">"Меню+"</string>
@@ -859,9 +863,9 @@
<string name="weeks" msgid="6509623834583944518">"тыд."</string>
<string name="year" msgid="4001118221013892076">"год"</string>
<string name="years" msgid="6881577717993213522">"г."</string>
- <!-- outdated translation 3359437293118172396 --> <string name="VideoView_error_title" msgid="5927895235831021723">"Немагчыма прайграць відэа"</string>
- <!-- outdated translation 897920883624437033 --> <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"Гэтае відэа не падыходзіць для патокавай перадачы на гэтую прыладу."</string>
- <!-- outdated translation 710301040038083944 --> <string name="VideoView_error_text_unknown" msgid="4309847331399592194">"На жаль, гэтае відэа не можа быць прайграна."</string>
+ <string name="VideoView_error_title" msgid="3534509135438353077">"Праблема з відэа"</string>
+ <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"Відэа не падыходзіць для патокавай перадачы на гэту прыладу."</string>
+ <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"Немагчыма прайграць гэта відэа."</string>
<string name="VideoView_error_button" msgid="2822238215100679592">"ОК"</string>
<string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="noon" msgid="7245353528818587908">"апоўдні"</string>
@@ -877,7 +881,7 @@
<string name="replace" msgid="5781686059063148930">"Замяніць..."</string>
<string name="delete" msgid="6098684844021697789">"Выдаліць"</string>
<string name="copyUrl" msgid="2538211579596067402">"Скапіяваць URL"</string>
- <!-- outdated translation 6738556348861347240 --> <string name="selectTextMode" msgid="1018691815143165326">"Вылучыць тэкст..."</string>
+ <string name="selectTextMode" msgid="1018691815143165326">"Выбраць тэкст"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Вылучэнне тэксту"</string>
<string name="addToDictionary" msgid="9090375111134433012">"дадаць у слоўнік"</string>
<string name="deleteText" msgid="7070985395199629156">"выдаліць"</string>
@@ -891,57 +895,52 @@
<string name="yes" msgid="5362982303337969312">"ОК"</string>
<string name="no" msgid="5141531044935541497">"Адмяніць"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"Увага"</string>
- <!-- outdated translation 1760724998928255250 --> <string name="loading" msgid="7933681260296021180">"Загрузка..."</string>
+ <string name="loading" msgid="7933681260296021180">"Загрузка..."</string>
<string name="capital_on" msgid="1544682755514494298">"Уключыць"</string>
<string name="capital_off" msgid="6815870386972805832">"Адключана"</string>
<string name="whichApplication" msgid="4533185947064773386">"Завяршыць дзеянне з дапамогай"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Выкарыстоўваць па змаўчанні для гэтага дзеяння."</string>
- <!-- outdated translation 4815455344600932173 --> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Ачысціць налады па змаўчанні ў меню \"Налады > Прыкладанні > Кіраванне прыкладаннямі."</string>
- <string name="chooseActivity" msgid="1009246475582238425">"Выберыце дзеянне."</string>
- <!-- outdated translation 7892597146032121735 --> <string name="chooseUsbActivity" msgid="6894748416073583509">"Выберыце праграму для USB-прылады"</string>
- <!-- outdated translation 1691104391758345586 --> <string name="noApplications" msgid="2991814273936504689">"Ніякае прыкладанне не можа выканаць гэтае дзеянне."</string>
+ <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Ачысціць па змаўчанні ў раздзеле \"Налады сістэмы > Прыкладанні > Спампаваныя\"."</string>
+ <string name="chooseActivity" msgid="7486876147751803333">"Выберыце дзеянне"</string>
+ <string name="chooseUsbActivity" msgid="6894748416073583509">"Выберыце прыкладанне для USB-прылады"</string>
+ <string name="noApplications" msgid="2991814273936504689">"Няма прыкладанняў, якія могуць выконваць гэты працэс."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
<string name="aerr_application" msgid="932628488013092776">"На жаль, прыкладанне <xliff:g id="APPLICATION">%1$s</xliff:g> спынілася."</string>
<string name="aerr_process" msgid="4507058997035697579">"На жаль, працэс <xliff:g id="PROCESS">%1$s</xliff:g> спыніўся."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
- <!-- no translation found for anr_activity_application (1904477189057199066) -->
- <skip />
- <!-- no translation found for anr_activity_process (5776209883299089767) -->
- <skip />
- <!-- no translation found for anr_application_process (8941757607340481057) -->
- <skip />
- <!-- no translation found for anr_process (6513209874880517125) -->
- <skip />
+ <string name="anr_activity_application" msgid="1904477189057199066">"Прыкладанне <xliff:g id="APPLICATION">%2$s</xliff:g> не адказвае."\n\n"Закрыць яго?"</string>
+ <string name="anr_activity_process" msgid="5776209883299089767">"Працэс <xliff:g id="ACTIVITY">%1$s</xliff:g> не адказвае."\n\n"Закрыць яго?"</string>
+ <string name="anr_application_process" msgid="8941757607340481057">"Прыкладанне <xliff:g id="APPLICATION">%1$s</xliff:g> не адказвае. Закрыць яго?"</string>
+ <string name="anr_process" msgid="6513209874880517125">"Працэс <xliff:g id="PROCESS">%1$s</xliff:g> не адказвае."\n\n"Закрыць яго?"</string>
<string name="force_close" msgid="8346072094521265605">"ОК"</string>
<string name="report" msgid="4060218260984795706">"Справаздача"</string>
<string name="wait" msgid="7147118217226317732">"Чакаць"</string>
- <!-- outdated translation 8323761616052121936 --> <string name="launch_warning_title" msgid="1547997780506713581">"Прыкладанне перанакіраванае"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Старонка не адказвае на запыты."\n\n"Закрыць яе?"</string>
+ <string name="launch_warning_title" msgid="1547997780506713581">"Прыкл. перанакіраванае"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Прыкладанне <xliff:g id="APP_NAME">%1$s</xliff:g> зараз запушчанае."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Прыкладанне <xliff:g id="APP_NAME">%1$s</xliff:g> запушчанае."</string>
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Шкала"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Заўсёды паказваць"</string>
- <!-- outdated translation 2953716574198046484 --> <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Каб зноў уключыць, перайдзіце ў Налады > Прыкладанні > Кіраванне прыкладаннямі."</string>
- <!-- no translation found for smv_application (3307209192155442829) -->
- <skip />
+ <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Зноў уключыце гэта ў раздзеле \"Сістэмныя налады > Прыкладанні > Спампаваныя\"."</string>
+ <string name="smv_application" msgid="3307209192155442829">"Прыкладанне <xliff:g id="APPLICATION">%1$s</xliff:g> (працэс <xliff:g id="PROCESS">%2$s</xliff:g>) парушыла ўласную палітыку StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Працэс <xliff:g id="PROCESS">%1$s</xliff:g> парушыў уласную палітыку StrictMode."</string>
- <!-- outdated translation 378740715658358071 --> <string name="android_upgrading_title" msgid="1584192285441405746">"Абнаўленне Android..."</string>
- <!-- no translation found for android_upgrading_apk (7904042682111526169) -->
- <skip />
- <!-- outdated translation 7959542881906488763 --> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Запуск прыкладанняў."</string>
+ <string name="android_upgrading_title" msgid="1584192285441405746">"Абнаўленне Android..."</string>
+ <string name="android_upgrading_apk" msgid="7904042682111526169">"Аптымізацыя прыкладання <xliff:g id="NUMBER_0">%1$d</xliff:g> з <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Запуск прыкладанняў."</string>
<string name="android_upgrading_complete" msgid="1405954754112999229">"Завяршэнне загрузкі."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Прыкладанне \"<xliff:g id="APP">%1$s</xliff:g>\" запушчанае"</string>
- <!-- outdated translation 2423977499339403402 --> <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Выберыце, каб пераключыцца да прыкладання"</string>
- <!-- outdated translation 1135403633766694316 --> <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Пераключыць прыкладанні?"</string>
- <!-- outdated translation 4592075610079319667 --> <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"Ужо запушчана іншае прыкладанне, якое павінна быць спыненае перад запускам новага."</string>
+ <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Націсніце, каб перайсці да прыкладання"</string>
+ <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Пераключыць прыкладанні?"</string>
+ <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"Ужо запушчана іншае прыкладанне, якое павінна быць спынена перад запускам новага."</string>
<string name="old_app_action" msgid="493129172238566282">"Вярнуцца да <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
- <!-- outdated translation 942967900237208466 --> <string name="old_app_description" msgid="2082094275580358049">"Не запускайце новае прыкладанне."</string>
+ <string name="old_app_description" msgid="2082094275580358049">"Не запускайце новыя прыкладанні."</string>
<string name="new_app_action" msgid="5472756926945440706">"Запусціць <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
- <!-- outdated translation 6830398339826789493 --> <string name="new_app_description" msgid="1932143598371537340">"Спыніць старое прыкладанне, не захоўваючы яго."</string>
- <string name="sendText" msgid="5132506121645618310">"Выберыце дзеянне для тэксту"</string>
+ <string name="new_app_description" msgid="1932143598371537340">"Спыніць старыя прыкладанні без захавання."</string>
+ <string name="sendText" msgid="5209874571959469142">"Выберыце дзеянне для тэкста"</string>
<string name="volume_ringtone" msgid="6885421406845734650">"Гучнасць званка"</string>
<string name="volume_music" msgid="5421651157138628171">"Гучнасць прайгравальніка"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Прайграваецца праз Bluetooth"</string>
- <string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"Выбрана ціхая мелодыя"</string>
+ <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Усталяваны ціхі рэжым"</string>
<string name="volume_call" msgid="3941680041282788711">"Гучнасць падчас размовы"</string>
<string name="volume_bluetooth_call" msgid="2002891926351151534">"Гучнасць Bluetooth падчас выкліку"</string>
<string name="volume_alarm" msgid="1985191616042689100">"Гучнасць будзільніка"</string>
@@ -965,30 +964,35 @@
<item quantity="one" msgid="1634101450343277345">"Адкрытая сетка Wi-Fi даступная"</item>
<item quantity="other" msgid="7915895323644292768">"Даступны адкрытыя сеткі Wi-Fi"</item>
</plurals>
- <string name="wifi_available_sign_in" msgid="9157196203958866662">"Уваход у сетку Wi-Fi"</string>
+ <string name="wifi_available_sign_in" msgid="4029489716605255386">"Увайдзіце ў сетку Wi-Fi"</string>
<!-- no translation found for wifi_available_sign_in_detailed (6797764740339907572) -->
<skip />
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Немагчыма падключыцца да Wi-Fi"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4917472096696322767">" дрэннае падключэнне да Інтэрнэту."</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" дрэннае падключэнне да Інтэрнэту."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
- <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Пачаць работу Wi-Fi Direct. Гэта адключыць Wi-Fi кліента/кропку доступу."</string>
- <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Немагчыма запусціць Wi-Fi Direct"</string>
- <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Запыт злучэння Wi-Fi Direct ад <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Націсніце \"ОК\", каб прыняць."</string>
- <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Запыт злучэння Wi-Fi Direct ад <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Увядзіце PIN-код для працягу."</string>
- <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Для працягу настройкі злучэння неабходна ўвесці PIN-код WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> на аднарангавай прыладзе <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Пачаць работу Wi-Fi Direct. Гэта адключыць кліента або кропку доступу Wi-Fi."</string>
+ <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Немагчыма запусціць Wi-Fi Direct."</string>
+ <string name="accept" msgid="1645267259272829559">"Прыняць"</string>
+ <string name="decline" msgid="2112225451706137894">"Адхіліць"</string>
+ <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"Запрашэнне адпраўлена"</string>
+ <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Запрашэнне далучыцца"</string>
+ <string name="wifi_p2p_from_message" msgid="570389174731951769">"Ад:"</string>
+ <string name="wifi_p2p_to_message" msgid="248968974522044099">"Каму:"</string>
+ <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Увядзіце патрэбны PIN-код:"</string>
+ <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN-код"</string>
<string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct уключаны"</string>
<string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Дакраніцеся, каб наладзіць"</string>
<string name="select_character" msgid="3365550120617701745">"Уставіць сімвал"</string>
- <!-- outdated translation 7630529934366549163 --> <string name="sms_control_default_app_name" msgid="3058577482636640465">"Невядомае прыкладанне"</string>
+ <string name="sms_control_default_app_name" msgid="3058577482636640465">"Невядомае прыкладанне"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Адпраўка SMS"</string>
- <!-- outdated translation 1289331457999236205 --> <string name="sms_control_message" msgid="4073755190243093924">"Адпраўляецца вялікая колькасць SMS. Выберыце \"OK\", каб працягнуць, ці \"Адмена\", каб спыніць адпраўку."</string>
+ <string name="sms_control_message" msgid="4073755190243093924">"Адпраўляецца вялікая колькасць SMS-паведамленняў. Націсніце \"OK\", каб працягнуць, ці \"Адмена\", каб спыніць адпраўку."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"ОК"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Адмяніць"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-карта выдаленая"</string>
<string name="sim_removed_message" msgid="2333164559970958645">"Мабільная сетка будзе недаступная да перазагрузкі з дзеючай SIM-картай."</string>
<string name="sim_done_button" msgid="827949989369963775">"Гатова"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM-карта дадазеная"</string>
- <string name="sim_added_message" msgid="1209265974048554242">"Для доступу да мабільнай сеткі неабходна перазагрузіць прыладу."</string>
+ <string name="sim_added_message" msgid="6599945301141050216">"Перазагрузіце прыладу, каб атрымаць доступ да мабільнай сеткі."</string>
<string name="sim_restart_button" msgid="4722407842815232347">"Перазапусціць"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Усталяваць час"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Усталяваць дату"</string>
@@ -997,40 +1001,40 @@
<string name="no_permissions" msgid="7283357728219338112">"Дазволу не патрабуецца"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Не паказваць"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Паказаць усе"</b></string>
- <string name="usb_storage_activity_title" msgid="2399289999608900443">"USB-назапашвальнік"</string>
+ <string name="usb_storage_activity_title" msgid="4465055157209648641">"Унiверсальны USB-назапашвальнік"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB падлучаны"</string>
- <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Вы падключыліся да кампутара праз USB. Націсніце кнопку ніжэй, калі вы хочаце капіраваць файлы з кампутара і USB-назапашвальнiка Android."</string>
- <string name="usb_storage_message" product="default" msgid="4510858346516069238">"Вы падключыліся да кампутара праз USB. Націсніце кнопку ніжэй, калі хочаце капіяваць файлы з кампутара і вашай SD-карты Android."</string>
+ <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Вы падлучаны да камп\'ютара праз USB. Націсніце на кнопку ніжэй, калі жадаеце капіраваць файлы з камп\'ютара на USB-назапашвальнік прылады Android і наадварот."</string>
+ <string name="usb_storage_message" product="default" msgid="805351000446037811">"Вы падключыліся да камп\'ютара праз USB. Націсніце на кнопку ніжэй, калі вы жадаеце скапіраваць файлы з камп\'ютара на SD-карту прылады Android і наадварот."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Уключыць USB-назапашвальнiк"</string>
- <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Праблема з выкарыстаннем USB-назапашвальнiка для прылады захоўвання дадзеных USB."</string>
- <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Праблема з выкарыстаннем SD-карты для USB-назапашвальнiка дадзеных."</string>
+ <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"Паўстала праблема з выкарыстаннем USB-назапашвальнiка ва ўнiверсальным USB-назапашвальнiку."</string>
+ <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"Паўстала праблема выкарыстання SD-карты ва ўнiверсальным USB-назапашвальнiку."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB падключаны"</string>
- <string name="usb_storage_notification_message" msgid="7380082404288219341">"Выберыце файлы для капіявання паміж тэлефонам і кампутарам."</string>
+ <string name="usb_storage_notification_message" msgid="939822783828183763">"Дакраніцеся, каб капіяваць файлы з камп\'ютара цi на яго."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Выключыць USB-назапашвальнiк"</string>
- <string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Выберыце, каб адключыць гэты USB-назапашвальнiк."</string>
+ <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"Націсніце, каб адключыць USB-назапашвальнік."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB-назапашвальнік выкарыстоўваецца"</string>
- <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Перш чым адключыць USB-назпашвальнiк, пераканайцеся, што вы адключылі (...выцягнулі...) USB-назапашвальнiк Android з кампутара."</string>
- <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Перш чым адключыць USB-назапашвальнік, пераканайцеся, што SD-карта Android адключана ад кампутара."</string>
+ <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"Перш чым адключыць USB-назапашвальнік, адключыце(\"вымiце\") USB-назапашвальнік прылады Android ад камп\'ютара."</string>
+ <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"Перш чым адключыць USB-назапашвальнік, адключыце(\"вымiце\") SD-карту вашай прылады Android з камп\'ютара."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Адключыць USB-назапашвальнiк"</string>
- <string name="usb_storage_stop_error_message" msgid="143881914840412108">"Праблема адключэння USB-назапашвальнiка. Пераканайцеся ў тым, што вы адлучылі хост USB, а затым паўтарыце спробу."</string>
+ <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"Памылка адключэння USB-назапашвальніка. Пераканайцеся, што вы адключылі хост USB, а потым паўтарыце спробу."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Падключыць USB-назапашвальнiк"</string>
- <!-- outdated translation 3202838234780505886 --> <string name="dlg_confirm_kill_storage_users_text" msgid="6206212680430268343">"Калі вы падлучыце USB-назапашвальнік, некаторыя прыкладанні, якія вы выкарыстоўваеце, спыняцца і могуць быць недаступныя, пакуль USB-назапашвальнік не будзе адключаны."</string>
+ <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"Калі вы ўключыце USB-назапашвальнік, некаторыя прыкладанні, якія вы выкарыстоўваеце, спыняцца і могуць быць недаступныя, пакуль USB-назапашвальнік не будзе адключаны."</string>
<string name="dlg_error_title" msgid="7323658469626514207">"Памылка працы USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"ОК"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Падлучана як медыя-прылада"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Падключаны як камера"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Падлучаны як усталявальнік"</string>
<string name="usb_accessory_notification_title" msgid="7848236974087653666">"Падключаны да USB-прылады"</string>
- <string name="usb_notification_message" msgid="4447869605109736382">"Націсніце, каб убачыць параметры USB"</string>
- <!-- outdated translation 7980995592595097841 --> <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Фарматаваць USB-назапашвальнiк"</string>
- <!-- outdated translation 7980995592595097841 --> <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Фарматаваць USB-назапашвальнiк"</string>
- <!-- outdated translation 8296908079722897772 --> <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Фарматаваць USB-назапашвальнiк, выдаліўшы ўсе файлы, якія захоўваюцца там? Адмянiць нельга"</string>
- <!-- outdated translation 8296908079722897772 --> <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Фарматаваць USB-назапашвальнiк, выдаліўшы ўсе файлы, якія захоўваюцца там? Адмянiць нельга"</string>
+ <string name="usb_notification_message" msgid="2290859399983720271">"Націсніце, каб убачыць іншыя параметры USB."</string>
+ <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Фарматаваць USB-назапашвальнiк?"</string>
+ <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Фарматаваць SD-карту?"</string>
+ <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Усе файлы, якія захоўваюцца на вашым USB-назапашвальніку, будуць выдалены. Гэта дзеянне не можа быць адменена."</string>
+ <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Усе дадзеныя на карце будуць страчаны."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Фармат"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Прылада адладкі USB падключана"</string>
- <!-- outdated translation 8592219392855947984 --> <string name="adb_active_notification_message" msgid="1016654627626476142">"Гэты кіёск абсталяваны Nexus S."</string>
- <!-- outdated translation 6865512749462072765 --> <string name="select_input_method" msgid="4653387336791222978">"Выберыце метад уводу"</string>
- <!-- outdated translation 6324843080254191535 --> <string name="configure_input_methods" msgid="9091652157722495116">"Налада метадаў уводу"</string>
+ <string name="adb_active_notification_message" msgid="1016654627626476142">"Націсніце, каб адключыць адладку USB."</string>
+ <string name="select_input_method" msgid="4653387336791222978">"Выберыце метад уводу"</string>
+ <string name="configure_input_methods" msgid="9091652157722495116">"Наладзіць метады ўводу"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" АБВГДЕЁЖЗІЙКЛМНОПРСТУЎФХЦЧШ\'ЫЬЭЮЯ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"кандыдат."</u></string>
@@ -1039,12 +1043,12 @@
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Праверка на наяўнасць памылак."</string>
<string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Пусты USB-назапашвальнiк"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Пустая SD-карта"</string>
- <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"USB-назапашвальнiк пусты або файлавая сістэма не падтрымліваецца."</string>
- <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD-карта пустая, або файлавая сістэма не падтрымліваецца."</string>
+ <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"USB-назапашвальнік пусты або мае файлавую сістэму, якая не падтрымліваецца."</string>
+ <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"SD-карта пустая або мае файлавую сістэму, якая не падтрымліваецца."</string>
<string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Пашкоджаны USB-назапашвальнiк"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"SD-карта пашкоджаная"</string>
- <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"USB-назапашвальнiк пашкоджаны. Магчыма, вам прыйдзецца яго перафарматаваць."</string>
- <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD-карта пашкоджаная. Магчыма, вам прыйдзецца перафарматаваць яе."</string>
+ <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"USB-назапашвальнік пашкоджаны. Паспрабуйце адфарматаваць яго."</string>
+ <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"SD-карта пашкоджана. Паспрабуйце адфарматаваць яе."</string>
<string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"USB-назапашвальнiк нечакана быў выдалены"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD-карта была нечакана выдалена"</string>
<string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Адключыце USB-назапашвальнiк, перш чым выцягваць яго, каб пазбегнуць страты дадзеных."</string>
@@ -1057,13 +1061,13 @@
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD-карта выдаленая"</string>
<string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USB-назапашвальнiк выдалены. Уставіць новыя носьбіты."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD-карта выдаленая. Устаўце новую."</string>
- <string name="activity_list_empty" msgid="4168820609403385789">"Няма адпаведных дзеянняў"</string>
+ <string name="activity_list_empty" msgid="1675388330786841066">"Адпаведныя дзеянні не знойдзены."</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"абнавіць статыстыку выкарыстання кампанентаў"</string>
- <!-- outdated translation 891553695716752835 --> <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"Дазваляе мяняць сабраную статыстыку выкарыстання кампанента. Не выкарыстоўваецца звычайнымі прыкладаннямі."</string>
- <!-- outdated translation 1660908117394854464 --> <string name="permlab_copyProtectedData" msgid="4341036311211406692">"Дазваляе выклікаць службы кантэйнера па змаўчанні для капіявання змесціва. Не выкарыстоўваецца звычайнымi прыкладаннямi."</string>
- <!-- outdated translation 537780957633976401 --> <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Дазваляе выклікаць службы кантэйнера па змаўчанні для капіявання змесціва. Не выкарыстоўваецца звычайнымi прыкладаннямi."</string>
- <!-- outdated translation 1311810005957319690 --> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Націсніце двойчы, каб кіраваць маштабаваннем"</string>
- <string name="gadget_host_error_inflating" msgid="2613287218853846830">"Памылка ўключэння віджэту"</string>
+ <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"Дазваляе прыкладанням змяняць сабраную статыстыку выкарыстання кампанентаў. Не для выкарыстання звычайнымі прыкладаннямі."</string>
+ <string name="permlab_copyProtectedData" msgid="4341036311211406692">"капіяваць змесціва"</string>
+ <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Дазваляе прыкладанням выклікаць службу захавання па змаўчанні для капіявання змесціва. Не выкарыстоўваецца звычайнымі прыкладаннямі."</string>
+ <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Двойчы дакраніцеся, каб змянiць маштаб"</string>
+ <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Немагчыма дадаць віджэт."</string>
<string name="ime_action_go" msgid="8320845651737369027">"Пачаць"</string>
<string name="ime_action_search" msgid="658110271822807811">"Пошук"</string>
<string name="ime_action_send" msgid="2316166556349314424">"Адправіць"</string>
@@ -1073,37 +1077,37 @@
<string name="ime_action_default" msgid="2840921885558045721">"Выканаць"</string>
<string name="dial_number_using" msgid="5789176425167573586">"Набраць нумар"\n"з выкарыстаннем <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="create_contact_using" msgid="4947405226788104538">"Стварыць кантакт"\n"з дапамогай<xliff:g id="NUMBER">%s</xliff:g>"</string>
- <!-- outdated translation 6824538733852821001 --> <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Гэтыя адно або некалькі прыкладанняў пытаюцца дазволу на доступ да вашага ўліковага запісу цяпер і ў будучыні."</string>
+ <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Гэтыя адно або некалькі прыкладанняў запытваюць дазвол на доступ да вашага ўліковага запісу цяпер і ў будучыні."</string>
<string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Дазволіць гэты запыт?"</string>
- <string name="grant_permissions_header_text" msgid="2722567482180797717">"Запыт на доступ"</string>
+ <string name="grant_permissions_header_text" msgid="6874497408201826708">"Запыт на доступ"</string>
<string name="allow" msgid="7225948811296386551">"Дазволіць"</string>
<string name="deny" msgid="2081879885755434506">"Забараніць"</string>
- <string name="permission_request_notification_title" msgid="5390555465778213840">"Запытаны дазвол"</string>
- <string name="permission_request_notification_with_subtitle" msgid="4325409589686688000">"Запытаны дазвол"\n"для ўліковага запісу<xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="permission_request_notification_title" msgid="6486759795926237907">"Дазвол запытаны"</string>
+ <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"Запытаны дазвол"\n"для ўліковага запісу <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="input_method_binding_label" msgid="1283557179944992649">"Метад уводу"</string>
<string name="sync_binding_label" msgid="3687969138375092423">"Сінхранізацыя"</string>
<string name="accessibility_binding_label" msgid="4148120742096474641">"Спецыяльныя магчымасці"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"Шпалеры"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"Змена шпалер"</string>
- <string name="vpn_title" msgid="8219003246858087489">"VPN актываваны."</string>
+ <string name="vpn_title" msgid="19615213552042827">"VPN актываваны"</string>
<string name="vpn_title_long" msgid="6400714798049252294">"VPN актывуецца прыкладаннем <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="vpn_text" msgid="1610714069627824309">"Націсніце, каб кіраваць сеткай."</string>
- <string name="vpn_text_long" msgid="4907843483284977618">"Падлучаны да <xliff:g id="SESSION">%s</xliff:g>. Націсніце, каб кiраваць сеткай."</string>
+ <string name="vpn_text" msgid="3011306607126450322">"Дакраніцеся, каб кіраваць сеткай."</string>
+ <string name="vpn_text_long" msgid="6407351006249174473">"Падлучаны да сеанса \"<xliff:g id="SESSION">%s</xliff:g>\". Дакраніцеся, каб кiраваць сеткай."</string>
<string name="upload_file" msgid="2897957172366730416">"Выберыце файл"</string>
<string name="no_file_chosen" msgid="6363648562170759465">"Файл не выбраны"</string>
<string name="reset" msgid="2448168080964209908">"Скінуць"</string>
<string name="submit" msgid="1602335572089911941">"Перадаць"</string>
<string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Рэжым \"У машыне\" ўключаны"</string>
- <string name="car_mode_disable_notification_message" msgid="668663626721675614">"Выберыце, каб выйсці з рэжыму \"Ў аўтамабілі\"."</string>
+ <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Дакраніцеся, каб выйсці з рэжыму \"Штурман\"."</string>
<string name="tethered_notification_title" msgid="3146694234398202601">"USB-мадэм або кропка доступу Wi-Fi актыўныя"</string>
- <string name="tethered_notification_message" msgid="3067108323903048927">"Націсніце, каб змяніць налады"</string>
+ <string name="tethered_notification_message" msgid="6857031760103062982">"Націсніце, каб наладзіць."</string>
<string name="back_button_label" msgid="2300470004503343439">"Назад"</string>
<string name="next_button_label" msgid="1080555104677992408">"Далей"</string>
<string name="skip_button_label" msgid="1275362299471631819">"Прапусціць"</string>
<string name="throttle_warning_notification_title" msgid="4890894267454867276">"Інтэнсіўнае выкарыстанне перадачы дадзеных праз мабільную сетку"</string>
- <string name="throttle_warning_notification_message" msgid="2609734763845705708">"Націсніце, каб даведацца больш аб выкарыстанні перадачы дадзеных праз мабільную сетку"</string>
+ <string name="throttle_warning_notification_message" msgid="3340822228599337743">"Націсніце, каб атрымаць дадатковыя звесткі аб выкарыстанні мабiльнай перадачы дадзеных."</string>
<string name="throttled_notification_title" msgid="6269541897729781332">"Ліміт мабільнай перадачы дадзеных перавышаны"</string>
- <string name="throttled_notification_message" msgid="4712369856601275146">"Націсніце, каб даведацца больш аб выкарыстанні перадачы дадзеных праз мабільную сетку"</string>
+ <string name="throttled_notification_message" msgid="5443457321354907181">"Націсніце, каб атрымаць дадатковыя звесткі аб выкарыстанні мабiльнай перадачы дадзеных."</string>
<string name="no_matches" msgid="8129421908915840737">"Няма супадзенняў"</string>
<string name="find_on_page" msgid="1946799233822820384">"Знайсці на старонцы"</string>
<plurals name="matches_found">
@@ -1111,10 +1115,10 @@
<item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> з <xliff:g id="TOTAL">%d</xliff:g>"</item>
</plurals>
<string name="action_mode_done" msgid="7217581640461922289">"Гатова"</string>
- <string name="progress_unmounting" product="nosdcard" msgid="535863554318797377">"Адключэнне USB-назапашвальнiка..."</string>
- <string name="progress_unmounting" product="default" msgid="5556813978958789471">"Адключэнне SD-карты..."</string>
- <string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Ачышчэнне USB-назапашвальнiка..."</string>
- <string name="progress_erasing" product="default" msgid="2115214724367534095">"Ачышчэнне SD-карты..."</string>
+ <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"Адключэнне USB-назапашвальнiка..."</string>
+ <string name="progress_unmounting" product="default" msgid="1327894998409537190">"Адключэнне SD-карты..."</string>
+ <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"Выдаленне дадзеных з USB-назапашвальнiка..."</string>
+ <string name="progress_erasing" product="default" msgid="6596988875507043042">"Выдаленне дадзеных з SD-карты..."</string>
<string name="format_error" product="nosdcard" msgid="6299769563624776948">"Немагчыма ачысцiць USB-назапашвальнік."</string>
<string name="format_error" product="default" msgid="7315248696644510935">"Немагчыма ачысцiць SD-карту."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD-карта была вынутая да адключэння"</string>
@@ -1133,17 +1137,17 @@
<string name="gpsVerifYes" msgid="2346566072867213563">"Так"</string>
<string name="gpsVerifNo" msgid="1146564937346454865">"Не"</string>
<string name="sync_too_many_deletes" msgid="5296321850662746890">"Выдаліць перавышаны ліміт"</string>
- <string name="sync_too_many_deletes_desc" msgid="7030265992955132593">"Ёсць выдаленыя элементы (<xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g>) для тыпу сiнхранiзацыi <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, уліковы запіс <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. Што вы хочаце зрабіць?"</string>
- <string name="sync_really_delete" msgid="8933566316059338692">"Выдаліць элементы."</string>
- <string name="sync_undo_deletes" msgid="8610996708225006328">"Скасаваць выдаленне."</string>
- <string name="sync_do_nothing" msgid="8717589462945226869">"Нічога зараз не рабіць."</string>
- <!-- outdated translation 4191313562041125787 --> <string name="choose_account_label" msgid="5655203089746423927">"Выберыце ўліковы запіс"</string>
+ <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"Выдалена элементаў для тыпу сінхранiзацыi \"<xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>\": <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g>. Уліковы запіс <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. Што вы жадаеце зрабіць?"</string>
+ <string name="sync_really_delete" msgid="2572600103122596243">"Выдаліць элементы."</string>
+ <string name="sync_undo_deletes" msgid="2941317360600338602">"Скасаваць выдаленні"</string>
+ <string name="sync_do_nothing" msgid="3743764740430821845">"Нічога зараз не рабіць"</string>
+ <string name="choose_account_label" msgid="5655203089746423927">"Выберыце ўліковы запіс"</string>
<string name="add_account_label" msgid="2935267344849993553">"Дадаць уліковы запіс"</string>
- <string name="choose_account_text" msgid="6891230675141555481">"Які ўліковы запіс вы хацелі б выкарыстоўваць?"</string>
+ <string name="choose_account_text" msgid="6303348737197849675">"Які ўліковы запіс вы жадаеце выкарыстоўваць?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Дадаць уліковы запіс"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Інкрэмент"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Дэкрэмент"</string>
- <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Націсніце і ўтрымлівайце кнопку <xliff:g id="VALUE">%s</xliff:g>."</string>
+ <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"Націсніце і ўтрымлівайце <xliff:g id="VALUE">%s</xliff:g>."</string>
<string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Перасуньце палец уверх, каб павялiчыць адрэзак, або ўніз, каб паменшыць."</string>
<string name="time_picker_increment_minute_button" msgid="2843066823236250329">"На хвiлiну больш"</string>
<string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"На хвiлiну менш"</string>
@@ -1172,10 +1176,10 @@
<string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Змена рэжыму"</string>
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
- <!-- outdated translation 4540794444768613567 --> <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Выберыце прыкладанне"</string>
+ <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Выберыце прыкладанне"</string>
<string name="shareactionprovider_share_with" msgid="806688056141131819">"Апублікаваць з дапамогай"</string>
<string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Адправiць з дапамогай прыкладання <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
- <!-- outdated translation 7311938669217173870 --> <string name="content_description_sliding_handle" msgid="415975056159262248">"Ручка для перасоўвання. Націсніце і ўтрымлівайце."</string>
+ <string name="content_description_sliding_handle" msgid="415975056159262248">"Ручка для перасоўвання. Націсніце і ўтрымлівайце."</string>
<string name="description_direction_up" msgid="1983114130441878529">"Уверх да <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_down" msgid="4294993639091088240">"Уніз да <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_direction_left" msgid="6814008463839915747">"Улева да <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
@@ -1185,29 +1189,29 @@
<string name="description_target_silent" msgid="893551287746522182">"Ціхі рэжым"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Гук уключаны"</string>
<string name="description_target_unlock_tablet" msgid="3833195335629795055">"Прагартайце, каб разблакаваць."</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Каб праслухаць паролi, падключыце гарнiтуру."</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Каб праслухаць паролi, падключыце гарнiтуру."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Кропка."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Перайсці да пачатковай старонкі"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Перайсці ўверх"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Больш налад"</string>
- <string name="storage_internal" msgid="7556050805474115618">"Унутраная памяць"</string>
- <string name="storage_sd_card" msgid="8921771478629812343">"SD-карта"</string>
+ <string name="storage_internal" msgid="4891916833657929263">"Унутраная памяць"</string>
+ <string name="storage_sd_card" msgid="3282948861378286745">"SD-карта"</string>
<string name="storage_usb" msgid="3017954059538517278">"USB-назапашвальнік"</string>
- <string name="extract_edit_menu_button" msgid="302060189057163906">"Рэдагаваць..."</string>
+ <string name="extract_edit_menu_button" msgid="8940478730496610137">"Рэдагаваць"</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Папярэджанне выкарыстання дадзеных"</string>
- <string name="data_usage_warning_body" msgid="7217480745540055170">"Дакраніцеся, каб прагледзець выкарыстанне і налады"</string>
+ <string name="data_usage_warning_body" msgid="2814673551471969954">"Дакраніцеся, каб прагледзець гісторыю выкарыстання і налады."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Перадача дадз. 2G-3G выключана"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Перадача дадзеных 4G выключана"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мабільная перадача дадз. выкл."</string>
<string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Перад. дадз. Wi-Fi адключаная"</string>
- <string name="data_usage_limit_body" msgid="4313857592916426843">"Націсніце, каб уключыць"</string>
+ <string name="data_usage_limit_body" msgid="3317964706973601386">"Націсніце, каб уключыць."</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Перавышаны ліміт 2G-3G"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Перавышаны ліміт дадзеных 4G"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Перавышаны ліміт мабільных дадзеных"</string>
<string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Перав. ліміт па дадзеным Wi-Fi"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> звыш устаноўленай мяжы"</string>
+ <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"Аб\'ём <xliff:g id="SIZE">%s</xliff:g> перавышае устаноўл. мяжу."</string>
<string name="data_usage_restricted_title" msgid="5965157361036321914">"Зыходныя дадзеныя абмежаваныя"</string>
- <string name="data_usage_restricted_body" msgid="5087354814839059798">"Націсніце, каб зняць абмежаванне"</string>
+ <string name="data_usage_restricted_body" msgid="6741521330997452990">"Націсніце, каб зняць абмежаванне."</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Сертыфікат бяспекі"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Гэты сертыфікат сапраўдны."</string>
<string name="issued_to" msgid="454239480274921032">"Выдадзены:"</string>
@@ -1222,9 +1226,12 @@
<string name="fingerprints" msgid="4516019619850763049">"Адбіткі пальцаў:"</string>
<string name="sha256_fingerprint" msgid="4391271286477279263">"Адбітак пальцаў SHA-256:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Адбіткі пальцаў SHA-1:"</string>
- <!-- outdated translation 180268188117163072 --> <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Глядзець усе..."</string>
- <!-- outdated translation 3325054276356556835 --> <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Выберыце дзеянне"</string>
- <!-- outdated translation 1791316789651185229 --> <string name="share_action_provider_share_with" msgid="5247684435979149216">"Апублікаваць праз..."</string>
+ <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Прагледзець усё"</string>
+ <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Выберыце працэс"</string>
+ <string name="share_action_provider_share_with" msgid="5247684435979149216">"Апублікаваць з дапамогай"</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Прылада заблакаваная."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
+ <string name="sending" msgid="3245653681008218030">"Адпраўка..."</string>
+ <string name="launchBrowserDefault" msgid="2057951947297614725">"Запусцiць браўзер?"</string>
+ <string name="SetupCallDefault" msgid="5834948469253758575">"Прыняць выклік?"</string>
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 8cc9ba3..6bec103 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Подаване на сигнал"</string>
<string name="wait" msgid="7147118217226317732">"Изчакване"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Страницата не отговаря."\n\n"Искате ли да я затворите?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Приложението се пренасочи"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> се изпълнява."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Първоначално бе стартирано: <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 4f2aef8..8dced70 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"D\'acord"</string>
<string name="report" msgid="4060218260984795706">"Informe"</string>
<string name="wait" msgid="7147118217226317732">"Espera"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"La pàgina ha deixat de respondre."\n\n"Vols tancar-la?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Aplicació redirigida"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> s\'està executant."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> es va iniciar originalment."</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index bfcf23f..e21de4b 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Nahlásit"</string>
<string name="wait" msgid="7147118217226317732">"Počkat"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Stránka nereaguje."\n\n"Chcete ji zavřít?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Přesměrování aplikace"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Je spuštěna aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Původně byla spuštěna aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 67b24bc..030a6b3 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -140,7 +140,7 @@
<string name="silent_mode_silent" msgid="319298163018473078">"Ringeren er deaktiveret"</string>
<string name="silent_mode_vibrate" msgid="7072043388581551395">"Ringervibrering"</string>
<string name="silent_mode_ring" msgid="8592241816194074353">"Ringeren er aktiveret"</string>
- <string name="shutdown_progress" msgid="2281079257329981203">"Lukker ned ..."</string>
+ <string name="shutdown_progress" msgid="2281079257329981203">"Lukker ned..."</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Din tabletcomputer slukkes nu."</string>
<string name="shutdown_confirm" product="default" msgid="649792175242821353">"Din telefon slukkes nu."</string>
<string name="shutdown_confirm_question" msgid="2906544768881136183">"Vil du slukke?"</string>
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Rapporter"</string>
<string name="wait" msgid="7147118217226317732">"Vent"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Siden svarer ikke."\n\n"Vil du lukke den?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Appen er omdirigeret"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> kører nu."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> blev oprindeligt åbnet."</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 7c85323..953897c 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -684,7 +684,7 @@
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Netzwerk gesperrt"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"PUK-Sperre auf SIM"</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Weitere Informationen erhalten Sie im Nutzerhandbuch oder beim Kundendienst."</string>
- <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"Bitte PIN eingeben"</string>
+ <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"PIN eingeben"</string>
<string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM-Karte wird entsperrt..."</string>
<string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. "\n\n"Bitte versuchen Sie es in <xliff:g id="NUMBER_1">%d</xliff:g> Sekunden noch einmal."</string>
<string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Sie haben Ihr Passwort <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch eingegeben."\n\n"Bitte versuchen Sie es in <xliff:g id="NUMBER_1">%d</xliff:g> Sekunden noch einmal."</string>
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Bericht"</string>
<string name="wait" msgid="7147118217226317732">"Warten"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Die Seite reagiert nicht mehr."\n\n"Möchten Sie die Seite schließen?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"App umgeleitet"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> wird jetzt ausgeführt."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> wurde ursprünglich gestartet."</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index aa07f3b..458517c 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"ΟΚ"</string>
<string name="report" msgid="4060218260984795706">"Αναφορά"</string>
<string name="wait" msgid="7147118217226317732">"Αναμονή"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Η σελίδα δεν ανταποκρίνεται πια."\n\n"Θέλετε να την κλείσετε;"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Ανακατεύθυνση εφαρμογής"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> εκτελείται τώρα."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Έγινε εκκίνηση πρώτα της εφαρμογής <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index c1f1b40..d48f544 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Report"</string>
<string name="wait" msgid="7147118217226317732">"Wait"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"The page has become unresponsive."\n\n"Do you want to close it?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"App redirected"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> is now running."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> was originally launched."</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index c7f86d0..c66dc8e 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -86,8 +86,8 @@
<string name="serviceClassDataSync" msgid="7530000519646054776">"Sincronización"</string>
<string name="serviceClassPacket" msgid="6991006557993423453">"Paquete"</string>
<string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
- <string name="roamingText0" msgid="7170335472198694945">"Indicador de roaming encendido"</string>
- <string name="roamingText1" msgid="5314861519752538922">"Indicador de roaming apagado"</string>
+ <string name="roamingText0" msgid="7170335472198694945">"Indicador de roaming activado"</string>
+ <string name="roamingText1" msgid="5314861519752538922">"Indicador de roaming desactivado"</string>
<string name="roamingText2" msgid="8969929049081268115">"Indicador de roaming titilando"</string>
<string name="roamingText3" msgid="5148255027043943317">"Fuera del vecindario"</string>
<string name="roamingText4" msgid="8808456682550796530">"Fuera de construcción"</string>
@@ -97,8 +97,8 @@
<string name="roamingText8" msgid="5989569778604089291">"Roaming: socio premium"</string>
<string name="roamingText9" msgid="7969296811355152491">"Roaming: funcionalidad de servicio completa"</string>
<string name="roamingText10" msgid="3992906999815316417">"Roaming: funcionalidad de servicio parcial"</string>
- <string name="roamingText11" msgid="4154476854426920970">"Banner de roaming encendido"</string>
- <string name="roamingText12" msgid="1189071119992726320">"Banner de roaming apagado"</string>
+ <string name="roamingText11" msgid="4154476854426920970">"Banner de roaming activado"</string>
+ <string name="roamingText12" msgid="1189071119992726320">"Banner de roaming desactivado"</string>
<string name="roamingTextSearching" msgid="8360141885972279963">"Buscando servicio"</string>
<string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: no se ha remitido"</string>
<string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
@@ -128,13 +128,13 @@
<string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sincronización"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Demasiadas eliminaciones de <xliff:g id="CONTENT_TYPE">%s</xliff:g>"</string>
<string name="low_memory" product="tablet" msgid="6494019234102154896">"Se ha agotado el espacio de almacenamiento de la tableta. Elimina algunos archivos para liberar espacio."</string>
- <string name="low_memory" product="default" msgid="3475999286680000541">"Se ha agotado el espacio de almacenamiento del teléfono. Elimina algunos archivos para liberar espacio."</string>
+ <string name="low_memory" product="default" msgid="3475999286680000541">"Se ha agotado el espacio de almacenamiento del dispositivo. Elimina algunos archivos para liberar espacio."</string>
<string name="me" msgid="6545696007631404292">"Yo"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"Opciones de tablet"</string>
- <string name="power_dialog" product="default" msgid="1319919075463988638">"Opciones de teléfono"</string>
+ <string name="power_dialog" product="default" msgid="1319919075463988638">"Opciones de dispositivo"</string>
<string name="silent_mode" msgid="7167703389802618663">"Modo silencioso"</string>
- <string name="turn_on_radio" msgid="3912793092339962371">"Encender el teléfono inalámbrico"</string>
- <string name="turn_off_radio" msgid="8198784949987062346">"Apagar el teléfono inalámbrico"</string>
+ <string name="turn_on_radio" msgid="3912793092339962371">"Activar conexión inalámbrica"</string>
+ <string name="turn_off_radio" msgid="8198784949987062346">"Desactivar conexión inalámbrica"</string>
<string name="screen_lock" msgid="799094655496098153">"Bloqueo de pantalla"</string>
<string name="power_off" msgid="4266614107412865048">"Apagar"</string>
<string name="silent_mode_silent" msgid="319298163018473078">"Timbre desactivado"</string>
@@ -142,30 +142,30 @@
<string name="silent_mode_ring" msgid="8592241816194074353">"Timbre activado"</string>
<string name="shutdown_progress" msgid="2281079257329981203">"Apagando…"</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tu tablet se apagará."</string>
- <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Tu teléfono se apagará."</string>
+ <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Tu dispositivo se apagará."</string>
<string name="shutdown_confirm_question" msgid="2906544768881136183">"¿Deseas apagarlo?"</string>
<string name="recent_tasks_title" msgid="3691764623638127888">"Reciente"</string>
<string name="no_recent_tasks" msgid="8794906658732193473">"No hay aplicaciones recientes."</string>
<string name="global_actions" product="tablet" msgid="408477140088053665">"Opciones de tablet"</string>
- <string name="global_actions" product="default" msgid="2406416831541615258">"Opciones de teléfono"</string>
+ <string name="global_actions" product="default" msgid="2406416831541615258">"Opciones de dispositivo"</string>
<string name="global_action_lock" msgid="2844945191792119712">"Bloqueo de pantalla"</string>
<string name="global_action_power_off" msgid="4471879440839879722">"Apagar"</string>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo silencioso"</string>
- <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"El sonido está Apagado"</string>
- <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"El sonido está Encendido"</string>
+ <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"El sonido está Desactivado"</string>
+ <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"El sonido está Activado"</string>
<string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo avión"</string>
- <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"El modo avión está Encendido"</string>
- <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"El modo avión está Apagado"</string>
+ <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"El modo avión está Activado"</string>
+ <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"El modo avión está Desactivado"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
<string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
<string name="permgrouplab_costMoney" msgid="5429808217861460401">"Servicios que te cuestan dinero"</string>
<string name="permgroupdesc_costMoney" msgid="3293301903409869495">"Permite que las aplicaciones realicen actividades con cargo."</string>
<string name="permgrouplab_messages" msgid="7521249148445456662">"Tus mensajes"</string>
- <string name="permgroupdesc_messages" msgid="7821999071003699236">"Lee y escribe tus SMS, mensajes de correo electrónico y otros mensajes."</string>
+ <string name="permgroupdesc_messages" msgid="7821999071003699236">"Lee y escribe tus SMS, mensajes de correo y otros mensajes."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Tu información personal"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acceso directo a los contactos y calendario guardados en tu teléfono."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acceso directo a tus contactos y calendario guardado en el teléfono."</string>
+ <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acceso directo a los contactos y calendario guardados en tu dispositivo."</string>
+ <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acceso directo a tus contactos y calendario guardado en el dispositivo."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Tu ubicación"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Controlar tu ubicación física"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicación de red"</string>
@@ -173,7 +173,7 @@
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Tus cuentas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acceder a las cuentas disponibles."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controles de hardware"</string>
- <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Acceso directo al hardware en el teléfono."</string>
+ <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Acceso directo al hardware en el dispositivo."</string>
<string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Llamadas telefónicas"</string>
<string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Controlar, grabar y procesar llamadas telefónicas."</string>
<string name="permgrouplab_systemTools" msgid="4652191644082714048">"Herramientas del sistema"</string>
@@ -203,10 +203,10 @@
<string name="permdesc_sendSmsNoConfirmation" msgid="3437759207020400204">"Permite que la aplicación envíe mensajes SMS. Las aplicaciones maliciosas pueden generar gastos a causa del envío de mensajes sin tu confirmación."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"leer SMS o MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="2341692916884515613">"Permite que la aplicación lea mensajes SMS almacenados en tu tableta o tarjeta SIM. Las aplicaciones maliciosas pueden leer tus mensajes confidenciales."</string>
- <string name="permdesc_readSms" product="default" msgid="5653850482025875493">"Permite que la aplicación lea mensajes SMS almacenados en tu teléfono o tarjeta SIM. Las aplicaciones maliciosas pueden leer tus mensajes confidenciales."</string>
+ <string name="permdesc_readSms" product="default" msgid="5653850482025875493">"Permite que la aplicación lea mensajes SMS almacenados en tu dispositivo o tarjeta SIM. Las aplicaciones maliciosas pueden leer tus mensajes confidenciales."</string>
<string name="permlab_writeSms" msgid="6881122575154940744">"editar SMS o MMS"</string>
<string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Permite que la aplicación escriba en mensajes SMS almacenados en tu tableta o tarjeta SIM. Las aplicaciones maliciosas pueden eliminar tus mensajes."</string>
- <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Permite que la aplicación escriba en mensajes SMS almacenados en tu teléfono o tarjeta SIM. Las aplicaciones maliciosas pueden eliminar tus mensajes."</string>
+ <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Permite que la aplicación escriba en mensajes SMS almacenados en tu dispositivo o tarjeta SIM. Las aplicaciones maliciosas pueden eliminar tus mensajes."</string>
<string name="permlab_receiveWapPush" msgid="8258226427716551388">"recibir WAP"</string>
<string name="permdesc_receiveWapPush" msgid="7983455145335316872">"Permite que la aplicación reciba y procese mensajes WAP. Las aplicaciones maliciosas pueden controlar tus mensajes o eliminarlos sin mostrártelos."</string>
<string name="permlab_getTasks" msgid="6466095396623933906">"recuperar aplicaciones en ejecución"</string>
@@ -215,11 +215,11 @@
<string name="permdesc_reorderTasks" msgid="4175137612205663399">"Permite que la aplicación mueva tareas al primero o segundo plano. Las aplicaciones maliciosas pueden forzar su paso al primer plano sin que tú las controles."</string>
<string name="permlab_removeTasks" msgid="6821513401870377403">"detener las aplicaciones en ejecución"</string>
<string name="permdesc_removeTasks" msgid="1394714352062635493">"Permite que la aplicación elimine tareas y cierre sus aplicaciones. Las aplicaciones malintencionadas pueden usar este permiso para interferir en el comportamiento de otras aplicaciones."</string>
- <string name="permlab_setDebugApp" msgid="3022107198686584052">"habilitar depuración de aplicación"</string>
+ <string name="permlab_setDebugApp" msgid="3022107198686584052">"activar depuración de aplicación"</string>
<string name="permdesc_setDebugApp" msgid="4474512416299013256">"Permite que la aplicación active la depuración de otra aplicación. Las aplicaciones malintencionadas pueden usar este permiso para interrumpir la ejecución de otras aplicaciones."</string>
<string name="permlab_changeConfiguration" msgid="8214475779521218295">"cambiar tu configuración de la interfaz de usuario"</string>
<string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Permite que la aplicación cambie la configuración actual como, por ejemplo, la configuración regional o el tamaño de fuente general."</string>
- <string name="permlab_enableCarMode" msgid="5684504058192921098">"habilitar el modo de auto"</string>
+ <string name="permlab_enableCarMode" msgid="5684504058192921098">"activar el modo de auto"</string>
<string name="permdesc_enableCarMode" msgid="4853187425751419467">"Permite que la aplicación habilite el modo coche."</string>
<string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"eliminar los procesos de fondo"</string>
<string name="permdesc_killBackgroundProcesses" msgid="931129103262126617">"Permite que la aplicación elimine procesos de otras aplicaciones que se ejecutan en segundo plano, aunque haya suficiente memoria."</string>
@@ -263,7 +263,7 @@
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Permite que la aplicación cree y administre sus propios tokens al ignorar su orden z normal. Las aplicaciones normales no deben utilizar este permiso."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"presionar teclas y botones de control"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Permite que la aplicación ofrezca sus propios eventos de entrada (pulsaciones de teclas, etc.) a otras aplicaciones. Las aplicaciones maliciosas pueden utilizar este permiso para controlar la tableta."</string>
- <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Permite que la aplicación ofrezca sus propios eventos de entrada (pulsaciones de teclas, etc.) a otras aplicaciones. Las aplicaciones maliciosas pueden utilizar este permiso para controlar el teléfono."</string>
+ <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Permite que la aplicación ofrezca sus propios eventos de entrada (pulsaciones de teclas, etc.) a otras aplicaciones. Las aplicaciones maliciosas pueden utilizar este permiso para controlar el dispositivo."</string>
<string name="permlab_readInputState" msgid="469428900041249234">"grabar tu tipo y las medidas que tomes"</string>
<string name="permdesc_readInputState" msgid="8387754901688728043">"Permite que la aplicación observe las teclas que presionas, incluso al interactuar con otra aplicación (como cuando escribes una contraseña). Las aplicaciones normales no deberían necesitar este permiso."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"vincular a un método de entrada"</string>
@@ -298,19 +298,19 @@
<string name="permdesc_installPackages" msgid="5628530972548071284">"Permite que la aplicación instale paquetes de Android nuevos o actualizados. Las aplicaciones maliciosas pueden utilizar este permiso para agregar nuevas aplicaciones con permisos arbitrarios potentes."</string>
<string name="permlab_clearAppCache" msgid="7487279391723526815">"eliminar todos los datos de caché de la aplicación"</string>
<string name="permdesc_clearAppCache" product="tablet" msgid="3523396284474042284">"Permite que la aplicación libere almacenamiento en la tableta al eliminar archivos en el directorio caché de la aplicación. El acceso al proceso del sistema suele ser muy restringido."</string>
- <string name="permdesc_clearAppCache" product="default" msgid="5067988373366292186">"Permite que la aplicación libere espacio de almacenamiento en el teléfono al eliminar archivos en el directorio caché de la aplicación. El acceso al proceso del sistema suele ser muy restringido."</string>
+ <string name="permdesc_clearAppCache" product="default" msgid="5067988373366292186">"Permite que la aplicación libere espacio de almacenamiento en el dispositivo al eliminar archivos en el directorio caché de la aplicación. El acceso al proceso del sistema suele ser muy restringido."</string>
<string name="permlab_movePackage" msgid="3289890271645921411">"mover recursos de la aplicación"</string>
<string name="permdesc_movePackage" msgid="319562217778244524">"Permite que la aplicación traslade recursos de la aplicación de medios internos a medios externos y viceversa."</string>
<string name="permlab_readLogs" msgid="6615778543198967614">"lee los datos confidenciales del registro"</string>
<string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Permite que la aplicación lea diversos archivos de registro del sistema. Esto le permite descubrir información general acerca de lo que haces con la tableta, lo que podría incluir información personal o privada."</string>
- <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Permite que la aplicación lea los diversos archivos de registro del sistema. Esto le permite descubrir información general acerca de lo que haces con el teléfono, que puede incluir información personal o privada."</string>
+ <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Permite que la aplicación lea los diversos archivos de registro del sistema. Esto le permite descubrir información general acerca de lo que haces con el dispositivo, que puede incluir información personal o privada."</string>
<string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"Usar cualquier decodificador de medios para la reproducción"</string>
<string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Permite que la aplicación use cualquier decodificador de archivos multimedia instalado para la reproducción."</string>
<string name="permlab_diagnostic" msgid="8076743953908000342">"leer y escribir a recursos dentro del grupo de diagnóstico"</string>
<string name="permdesc_diagnostic" msgid="6608295692002452283">"Permite que la aplicación lea y escriba en cualquier recurso propiedad del grupo de diagnóstico como, por ejemplo, archivos in/dev. Este permiso podría afectar la seguridad y estabilidad del sistema. SOLO se debe utilizar para diagnósticos específicos de hardware realizados por el fabricante o el operador."</string>
<string name="permlab_changeComponentState" msgid="6335576775711095931">"activar o desactivar componentes de la aplicación"</string>
- <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Permite que la aplicación determine si un componente de otra aplicación está habilitado o no. Las aplicaciones maliciosas pueden utilizar este permiso para inhabilitar funciones importantes de la tableta. Es necesario ser precavido con este permiso, ya que es posible que los componentes de la aplicación queden inservibles, incoherentes o inestables."</string>
- <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Permite que la aplicación determine si un componente de otra aplicación está habilitado o no. Las aplicaciones maliciosas pueden utilizar este permiso para inhabilitar funciones importantes del teléfono. Es necesario ser precavido con este permiso, ya que es posible que los componentes de la aplicación queden inservibles, incoherentes o inestables."</string>
+ <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Permite que la aplicación determine si un componente de otra aplicación está habilitado o no. Las aplicaciones maliciosas pueden utilizar este permiso para desactivar funciones importantes de la tableta. Es necesario ser precavido con este permiso, ya que es posible que los componentes de la aplicación queden inservibles, incoherentes o inestables."</string>
+ <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Permite que la aplicación determine si un componente de otra aplicación está habilitado o no. Las aplicaciones maliciosas pueden utilizar este permiso para desactivar funciones importantes del dispositivo. Es necesario ser precavido con este permiso, ya que es posible que los componentes de la aplicación queden inservibles, incoherentes o inestables."</string>
<string name="permlab_setPreferredApplications" msgid="8463181628695396391">"establecer aplicaciones preferidas"</string>
<string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Permite que la aplicación modifique tus aplicaciones preferidas. Las aplicaciones maliciosas pueden modificar sin aviso las aplicaciones que se ejecutan y así engañar a tus aplicaciones existentes para que recopilen tu información privada."</string>
<string name="permlab_writeSettings" msgid="1365523497395143704">"modificar la configuración global del sistema"</string>
@@ -321,16 +321,16 @@
<string name="permdesc_writeGservices" msgid="1287309437638380229">"Permite que la aplicación modifique el mapa de servicios de Google. Las aplicaciones normales no deben utilizar este permiso."</string>
<string name="permlab_receiveBootCompleted" msgid="7776779842866993377">"ejecutar automáticamente al iniciar"</string>
<string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Permite que la aplicación se inicie en cuanto el sistema haya finalizado la inicialización. Esto puede ocasionar que la tableta tarde más en inicializarse y que la aplicación ralentice el funcionamiento general de la tableta al estar en ejecución constante."</string>
- <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Permite que la aplicación se inicie en cuanto el sistema haya finalizado la inicialización. Esto puede ocasionar que el teléfono tarde más en inicializarse y que la aplicación ralentice el funcionamiento general del teléfono al estar en ejecución constante."</string>
+ <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Permite que la aplicación se inicie en cuanto el sistema haya finalizado la inicialización. Esto puede ocasionar que el dispositivo tarde más en inicializarse y que la aplicación ralentice el funcionamiento general del dispositivo al estar en ejecución constante."</string>
<string name="permlab_broadcastSticky" msgid="7919126372606881614">"enviar emisiones pegajosas"</string>
<string name="permdesc_broadcastSticky" product="tablet" msgid="1181582512022829259">"Permite que la aplicación envíe transmisiones persistentes que permanecen luego de que finaliza la transmisión. Las aplicaciones maliciosas pueden hacer que la tableta funcione más lentamente o de manera inestable al forzarla a utilizar mucha memoria."</string>
- <string name="permdesc_broadcastSticky" product="default" msgid="3287869131621514325">"Permite que la aplicación envíe transmisiones persistentes que permanecen luego de que finaliza la transmisión. Las aplicaciones maliciosas pueden hacer que el teléfono funcione más lento o de manera inestable al forzarlo a utilizar mucha memoria."</string>
+ <string name="permdesc_broadcastSticky" product="default" msgid="3287869131621514325">"Permite que la aplicación envíe transmisiones persistentes que permanecen luego de que finaliza la transmisión. Las aplicaciones maliciosas pueden hacer que el dispositivo funcione más lento o de manera inestable al forzarlo a utilizar mucha memoria."</string>
<string name="permlab_readContacts" msgid="6219652189510218240">"leer datos de contacto"</string>
<string name="permdesc_readContacts" product="tablet" msgid="4028657556924039119">"Permite que la aplicación lea todos los datos de contacto (direcciones) almacenados en tu tableta. Las aplicaciones maliciosas pueden usar este permiso para enviar tus datos a otras personas."</string>
- <string name="permdesc_readContacts" product="default" msgid="2032222056456498547">"Permite que la aplicación lea todos los datos de contacto (direcciones) almacenados en tu teléfono. Las aplicaciones maliciosas pueden utilizar este permiso para enviar tus datos a otro teléfono."</string>
+ <string name="permdesc_readContacts" product="default" msgid="2032222056456498547">"Permite que la aplicación lea todos los datos de contacto (direcciones) almacenados en tu dispositivo. Las aplicaciones maliciosas pueden utilizar este permiso para enviar tus datos a otro dispositivo."</string>
<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 teléfono. 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>
<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>
@@ -341,8 +341,8 @@
<string name="permdesc_writeSocialStream" product="default" msgid="3496277176955721451">"Permite que la aplicación muestre las actualizaciones sociales de tus amigos. Las aplicaciones maliciosas pueden usar este permiso para hacerse pasar por un amigo y engañarte para que reveles contraseñas u otros datos confidenciales."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"Leer eventos de calendario e información confidencial"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="2338414551004122687">"Permite que la aplicación lea todos los eventos del calendario almacenados en tu tableta, incluidos los de amigos o compañeros de trabajo. Las aplicaciones maliciosas pueden extraer información personal de esos calendarios sin que los propietarios lo sepan."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5693933067751827753">"Permite que la aplicación lea todos los eventos del calendario almacenados en tu teléfono, incluidos los de amigos o compañeros de trabajo. Las aplicaciones maliciosas pueden extraer información personal de esos calendarios sin que los propietarios lo sepan."</string>
- <string name="permlab_writeCalendar" msgid="8438874755193825647">"Agregar o modificar los eventos de calendario y enviar un correo electrónico a los invitados sin que los propietarios lo sepan"</string>
+ <string name="permdesc_readCalendar" product="default" msgid="5693933067751827753">"Permite que la aplicación lea todos los eventos del calendario almacenados en tu dispositivo, incluidos los de amigos o compañeros de trabajo. Las aplicaciones maliciosas pueden extraer información personal de esos calendarios sin que los propietarios lo sepan."</string>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"Agregar o modificar los eventos de calendario y enviar un correo a los invitados sin que los propietarios lo sepan"</string>
<string name="permdesc_writeCalendar" msgid="2243771395254848873">"Permite que la aplicación envíe invitaciones a eventos como propietario del calendario, y que agregue, elimine y cambie eventos que puedes modificar en tu dispositivo, incluidos los de tus amigos o compañeros de trabajo. Las aplicaciones maliciosas pueden enviar correos electrónicos de spam que aparenten provenir de propietarios de calendarios, modificar eventos sin que el propietario lo sepa o agregar eventos falsos."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"crear fuentes de ubicación de prueba"</string>
<string name="permdesc_accessMockLocation" msgid="7577931556422993949">"Permite que la aplicación cree fuentes de ubicación simuladas para pruebas. Las aplicaciones maliciosas pueden utilizar este permiso para anular la ubicación o el estado que devuelven las fuentes de ubicación actuales, como los proveedores de GPS o redes."</string>
@@ -352,10 +352,10 @@
<string name="permdesc_installLocationProvider" msgid="1742577679350078373">"Crear fuentes de ubicación simuladas para pruebas. Las aplicaciones maliciosas pueden utilizar esta opción para anular la ubicación o el estado que devuelven las fuentes de ubicación reales, como los proveedores de GPS o redes, o para monitorear e informar tu ubicación a una fuente externa."</string>
<string name="permlab_accessFineLocation" msgid="8116127007541369477">"ubicación precisa (GPS)"</string>
<string name="permdesc_accessFineLocation" product="tablet" msgid="5326423948268164934">"Permite acceder a las fuentes de ubicación precisas, como el sistema de posicionamiento global en la tableta, si está disponible. Las aplicaciones maliciosas pueden utilizar este permiso para determinar dónde te encuentras y pueden consumir batería adicional."</string>
- <string name="permdesc_accessFineLocation" product="default" msgid="7130267914433890869">"Permite acceder a las fuentes de ubicación precisa, como el sistema de posicionamiento global del teléfono, si está disponible. Las aplicaciones maliciosas pueden utilizar este permiso para determinar dónde te encuentras y pueden consumir batería adicional."</string>
+ <string name="permdesc_accessFineLocation" product="default" msgid="7130267914433890869">"Permite acceder a las fuentes de ubicación precisa, como el sistema de posicionamiento global del dispositivo, si está disponible. Las aplicaciones maliciosas pueden utilizar este permiso para determinar dónde te encuentras y pueden consumir batería adicional."</string>
<string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"ubicación aproximada (basada en la red)"</string>
<string name="permdesc_accessCoarseLocation" product="tablet" msgid="5460726396318105483">"Permite acceder a las fuentes de ubicación aproximada, como la base de datos de la red para celulares, para determinar la ubicación aproximada de una tableta, si está disponible. Las aplicaciones maliciosas pueden utilizar este permiso para determinar tu ubicación aproximada."</string>
- <string name="permdesc_accessCoarseLocation" product="default" msgid="8900795778057579522">"Permite acceder a fuentes de ubicación aproximada como, por ejemplo, la base de datos de la red para celulares, para determinar la ubicación aproximada de un teléfono, si está disponible. Las aplicaciones maliciosas pueden utilizar este permiso para determinar tu ubicación aproximada."</string>
+ <string name="permdesc_accessCoarseLocation" product="default" msgid="8900795778057579522">"Permite acceder a fuentes de ubicación aproximada como, por ejemplo, la base de datos de la red para celulares, para determinar la ubicación aproximada de un dispositivo, si está disponible. Las aplicaciones maliciosas pueden utilizar este permiso para determinar tu ubicación aproximada."</string>
<string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"acceder a SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite que la aplicación utilice funciones de SurfaceFlinger de bajo nivel."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"leer el búfer de tramas"</string>
@@ -366,14 +366,14 @@
<string name="permdesc_recordAudio" msgid="2387462233976248635">"Permite que la aplicación acceda a la ruta de grabación de audio."</string>
<string name="permlab_camera" msgid="3616391919559751192">"tomar fotografías y grabar videos"</string>
<string name="permdesc_camera" msgid="1507407407002492176">"Permite que la aplicación tome fotografías y grabe videos con la cámara. De este modo, la aplicación puede obtener las imágenes que capta la cámara en cualquier momento."</string>
- <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"inhabilitar tablet de forma permanente"</string>
- <string name="permlab_brick" product="default" msgid="8337817093326370537">"desactivar teléfono de manera permanente"</string>
+ <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"desactivar tablet de forma permanente"</string>
+ <string name="permlab_brick" product="default" msgid="8337817093326370537">"desactivar dispositivo de manera permanente"</string>
<string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Permite que la aplicación inhabilite toda la tableta de manera permanente. Esto es muy peligroso."</string>
- <string name="permdesc_brick" product="default" msgid="5788903297627283099">"Permite que la aplicación inhabilite el teléfono de forma permanente. Este permiso es muy peligroso."</string>
+ <string name="permdesc_brick" product="default" msgid="5788903297627283099">"Permite que la aplicación inhabilite el dispositivo de forma permanente. Este permiso es muy peligroso."</string>
<string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"forzar reinicio del tablet"</string>
- <string name="permlab_reboot" product="default" msgid="2898560872462638242">"forzar reinicio del teléfono"</string>
+ <string name="permlab_reboot" product="default" msgid="2898560872462638242">"forzar reinicio del dispositivo"</string>
<string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Permite que la aplicación provoque el reinicio de la tableta."</string>
- <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Permite que la aplicación fuerce el reinicio del teléfono."</string>
+ <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Permite que la aplicación fuerce el reinicio del dispositivo."</string>
<string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"montar y desmontar filesystems"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Permite que la aplicación active y desactive sistemas de archivos para un almacenamiento extraíble."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"espacio de almacenamiento externo del formato"</string>
@@ -403,7 +403,7 @@
<string name="permlab_callPrivileged" msgid="4198349211108497879">"llamar directamente a cualquier número de teléfono"</string>
<string name="permdesc_callPrivileged" msgid="1689024901509996810">"Permite que la aplicación llame a cualquier número de teléfono, incluidos números de emergencia, sin tu intervención. Las aplicaciones maliciosas pueden realizar llamadas innecesarias e ilegales a servicios de emergencia."</string>
<string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"iniciar directamente la configuración CDMA del tablet"</string>
- <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"iniciar directamente la configuración CDMA del teléfono"</string>
+ <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"iniciar directamente la configuración CDMA del dispositivo"</string>
<string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Permite que la aplicación inicie el método de acceso CDMA. Las aplicaciones maliciosas pueden iniciar el método CDMA de forma innecesaria."</string>
<string name="permlab_locationUpdates" msgid="7785408253364335740">"controlar las notificaciones de actualización de ubicación"</string>
<string name="permdesc_locationUpdates" msgid="1120741557891438876">"Permite que la aplicación habilite/deshabilite notificaciones de actualización de ubicación de la radio. Las aplicaciones normales no deben utilizar este permiso."</string>
@@ -411,21 +411,21 @@
<string name="permdesc_checkinProperties" msgid="4024526968630194128">"Permite que la aplicación lea/escriba el acceso a propiedades subidas por el servicio de registro. Las aplicaciones normales no deben usar este permiso."</string>
<string name="permlab_bindGadget" msgid="776905339015863471">"elegir widgets"</string>
<string name="permdesc_bindGadget" msgid="8261326938599049290">"Permite que la aplicación le indique al sistema qué widgets se pueden utilizar con cada aplicación. Una aplicación con este permiso puede proporcionar acceso a información personal por parte de otras aplicaciones. Las aplicaciones normales no deben utilizar este permiso."</string>
- <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"modificar el estado del teléfono"</string>
+ <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"modificar el estado del dispositivo"</string>
<string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Permite que la aplicación controle las funciones de teléfono del dispositivo. Una aplicación con este permiso puede cambiar redes, encender y apagar la radio del teléfono y tareas similares sin siquiera notificártelo."</string>
- <string name="permlab_readPhoneState" msgid="2326172951448691631">"leer el estado del teléfono y la identidad"</string>
+ <string name="permlab_readPhoneState" msgid="2326172951448691631">"leer el estado del dispositivo y la identidad"</string>
<string name="permdesc_readPhoneState" msgid="5127767618743602782">"Permite que la aplicación acceda a las funciones de teléfono del dispositivo. Una aplicación con este permiso puede determinar el número de teléfono y el número de serie del teléfono, si hay una llamada activa, el número al que esa llamada está conectada, etc."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"evitar que el tablet entre en estado de inactividad"</string>
- <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"evitar que el teléfono entre en estado de inactividad"</string>
+ <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"evitar que el dispositivo entre en estado de inactividad"</string>
<string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Permite que la aplicación evite que la tableta entre en estado de inactividad."</string>
- <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Permite que la aplicación evite que el teléfono entre en estado de inactividad."</string>
+ <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Permite que la aplicación evite que el dispositivo entre en estado de inactividad."</string>
<string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"apagar o encender el tablet"</string>
- <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"apagar o encender el teléfono"</string>
+ <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"apagar o encender el dispositivo"</string>
<string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Permite que la aplicación encienda o apague la tableta."</string>
- <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Permite que la aplicación encienda o apague el teléfono."</string>
+ <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Permite que la aplicación encienda o apague el dispositivo."</string>
<string name="permlab_factoryTest" msgid="3715225492696416187">"ejecutar en el modo de prueba de fábrica"</string>
<string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Se ejecuta como una prueba de fábrica de bajo nivel que permite un acceso completo al hardware del tablet. Sólo disponible cuando el tablet se ejecuta en el modo de prueba de fábrica."</string>
- <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Se ejecuta como una prueba de fábrica de bajo nivel que permite un acceso completo al hardware del teléfono. Sólo disponible cuando un teléfono se ejecuta en el modo de prueba de fábrica."</string>
+ <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Se ejecuta como una prueba de fábrica de bajo nivel que permite un acceso completo al hardware del dispositivo. Sólo disponible cuando un dispositivo se ejecuta en el modo de prueba de fábrica."</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"establecer papel tapiz"</string>
<string name="permdesc_setWallpaper" msgid="7373447920977624745">"Permite que la aplicación establezca el fondo de pantalla del sistema."</string>
<string name="permlab_setWallpaperHints" msgid="3600721069353106851">"establecer sugerencias de tamaño del papel tapiz"</string>
@@ -434,15 +434,15 @@
<string name="permdesc_masterClear" msgid="3665380492633910226">"Permite que la aplicación restablezca por completo el sistema a su configuración de fábrica al eliminar todos los datos, la configuración y las aplicaciones instaladas."</string>
<string name="permlab_setTime" msgid="2021614829591775646">"establecer la hora"</string>
<string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Permite que la aplicación cambie la hora del reloj de la tableta."</string>
- <string name="permdesc_setTime" product="default" msgid="1855702730738020">"Permite que la aplicación cambie la hora del reloj del teléfono."</string>
+ <string name="permdesc_setTime" product="default" msgid="1855702730738020">"Permite que la aplicación cambie la hora del reloj del dispositivo."</string>
<string name="permlab_setTimeZone" msgid="2945079801013077340">"establecer zona horaria"</string>
<string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Permite que la aplicación cambie la zona horaria de la tableta."</string>
- <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Permite que la aplicación cambie la zona horaria del teléfono."</string>
+ <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Permite que la aplicación cambie la zona horaria del dispositivo."</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"actuar como cuenta, administrador o servicio"</string>
<string name="permdesc_accountManagerService" msgid="1948455552333615954">"Permite que la aplicación haga llamadas a los autenticadores de cuentas."</string>
<string name="permlab_getAccounts" msgid="4549918644233460103">"descubrir cuentas conocidas"</string>
<string name="permdesc_getAccounts" product="tablet" msgid="3238360555257773358">"Permite que la aplicación obtenga una lista de cuentas reconocidas por la tableta."</string>
- <string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Permite que la aplicación obtenga una lista de cuentas reconocidas por el teléfono."</string>
+ <string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Permite que la aplicación obtenga una lista de cuentas reconocidas por el dispositivo."</string>
<string name="permlab_authenticateAccounts" msgid="3940505577982882450">"actuar como autenticador de cuenta"</string>
<string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Permite que la aplicación utilice las capacidades del autenticador de cuentas del administrador de cuentas, incluida la creación de cuentas y la obtención y configuración de sus contraseñas."</string>
<string name="permlab_manageAccounts" msgid="4440380488312204365">"administrar la lista de cuentas"</string>
@@ -469,18 +469,18 @@
<string name="permdesc_changeWifiMulticastState" msgid="7633598524564320817">"Permite que la aplicación reciba paquetes que no están dirigidos directamente a tu dispositivo. Esto puede ser útil para descubrir servicios cercanos. Utiliza más energia que el modo que no es de multidifusión."</string>
<string name="permlab_bluetoothAdmin" msgid="3606576270792236062">"Administración de Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Permite que la aplicación configure la tableta Bluetooth local y descubra y se sincronice con dispositivos remotos."</string>
- <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permite que la aplicación configure el teléfono Bluetooth local y descubra y se sincronice con dispositivos remotos."</string>
+ <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permite que la aplicación configure el dispositivo Bluetooth local y descubra y se sincronice con dispositivos remotos."</string>
<string name="permlab_accessWimaxState" msgid="1232061307208861588">"Ver el estado de WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="5914958077555177749">"Permite que la aplicación consulte la información sobre el estado de WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Cambiar el estado de WiMAX"</string>
<string name="permdesc_changeWimaxState" msgid="3328853825006455912">"Permite que la aplicación se conecte a una red WiMAX y se desconecte de ella."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"crear conexiones de Bluetooth"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="7007851048416363446">"Permite que la aplicación vea la configuración de la tableta Bluetooth local, y que cree y acepte conexiones con los dispositivos sincronizados."</string>
- <string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Permite que la aplicación vea la configuración del teléfono Bluetooth local, y que cree y acepte conexiones con los dispositivos sincronizados."</string>
+ <string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Permite que la aplicación vea la configuración del dispositivo Bluetooth local, y que cree y acepte conexiones con los dispositivos sincronizados."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"controlar la Transmisión de datos en proximidad"</string>
<string name="permdesc_nfc" msgid="7120611819401789907">"Permite que la aplicación se comunique con lectores, tarjetas y etiquetas de Comunicación de campo cercano (NFC)."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"desactivar el bloqueo"</string>
- <string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Permite que la aplicación inhabilite el bloqueo del teclado y cualquier protección con contraseña asociada. Un ejemplo de este permiso es la inhabilitación por parte del teléfono del bloqueo del teclado al recibir una llamada telefónica entrante y su posterior habilitación cuando finaliza la llamada."</string>
+ <string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Permite que la aplicación inhabilite el bloqueo del teclado y cualquier protección con contraseña asociada. Un ejemplo de este permiso es la inhabilitación por parte del dispositivo del bloqueo del teclado al recibir una llamada telefónica entrante y su posterior habilitación cuando finaliza la llamada."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"leer la configuración de sincronización"</string>
<string name="permdesc_readSyncSettings" msgid="5464056785274229278">"Permite que la aplicación lea la configuración de sincronización; por ejemplo, si está habilitada la sincronización para la aplicación Personas."</string>
<string name="permlab_writeSyncSettings" msgid="6297138566442486462">"escribir configuración de sincronización"</string>
@@ -515,14 +515,14 @@
<string name="policydesc_limitPassword" msgid="3252114203919510394">"Controlar la longitud y los caracteres permitidos en las contraseñas para desbloquear la pantalla"</string>
<string name="policylab_watchLogin" msgid="914130646942199503">"Supervisa los intentos para desbloquear la pantalla"</string>
<string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Controla la cantidad de contraseñas incorrectas ingresadas al desbloquear la pantalla y bloquea la tableta o borra todos los datos de la tableta si se ingresaron demasiadas contraseñas incorrectas."</string>
- <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Controla la cantidad de contraseñas ingresadas incorrectamente al desbloquear la pantalla y bloquea el teléfono o borra todos sus datos si se ingresan demasiadas contraseñas incorrectas."</string>
+ <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Controla la cantidad de contraseñas ingresadas incorrectamente al desbloquear la pantalla y bloquea el dispositivo o borra todos sus datos si se ingresan demasiadas contraseñas incorrectas."</string>
<string name="policylab_resetPassword" msgid="2620077191242688955">"Cambiar la contraseña para desbloquear la pantalla"</string>
<string name="policydesc_resetPassword" msgid="605963962301904458">"Cambiar la contraseña para desbloquear la pantalla"</string>
<string name="policylab_forceLock" msgid="2274085384704248431">"Bloquear la pantalla"</string>
<string name="policydesc_forceLock" msgid="1141797588403827138">"Controlar cómo y cuándo se bloquea la pantalla"</string>
- <string name="policylab_wipeData" msgid="3910545446758639713">"Borrar todos los datos"</string>
- <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Borrar los datos de la tableta sin avisar y restablecer la configuración de fábrica"</string>
- <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Borrar los datos del teléfono sin avisar y restablecer la configuración de fábrica"</string>
+ <string name="policylab_wipeData" msgid="3910545446758639713">"Eliminar todos los datos"</string>
+ <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Eliminar los datos de la tableta sin avisar y restablecer la configuración de fábrica"</string>
+ <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Eliminar los datos del dispositivo sin avisar y restablecer la configuración de fábrica"</string>
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Configura el proxy global de dispositivo"</string>
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Configuración del proxy global de dispositivo que se utilizará mientras se habilita la política. Sólo la primera administración de dispositivo configura el proxy global efectivo."</string>
<string name="policylab_expirePassword" msgid="885279151847254056">"Establecer la caducidad del bloqueo de pantalla"</string>
@@ -629,7 +629,7 @@
<string name="relationTypeAssistant" msgid="6274334825195379076">"Asistente"</string>
<string name="relationTypeBrother" msgid="8757913506784067713">"Hermano"</string>
<string name="relationTypeChild" msgid="1890746277276881626">"Hijo"</string>
- <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Conviviente"</string>
+ <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Pareja de hecho"</string>
<string name="relationTypeFather" msgid="5228034687082050725">"Padre"</string>
<string name="relationTypeFriend" msgid="7313106762483391262">"Amigo"</string>
<string name="relationTypeManager" msgid="6365677861610137895">"Gerente"</string>
@@ -671,7 +671,7 @@
<string name="lockscreen_low_battery" msgid="1482873981919249740">"Conecta tu cargador."</string>
<string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"No hay tarjeta SIM."</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"No hay tarjeta SIM en el tablet."</string>
- <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"No hay tarjeta SIM en el teléfono."</string>
+ <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"No hay tarjeta SIM en el dispositivo."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Inserta una tarjeta SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Falta la tarjeta SIM o no se puede leer. Introduce una tarjeta SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Tu tarjeta SIM se ha inhabilitado de forma permanente."\n" Ponte en contacto con tu proveedor de servicios inalámbricos para obtener otra tarjeta SIM."</string>
@@ -690,27 +690,27 @@
<string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Escribiste incorrectamente tu contraseña <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Escribiste incorrectamente tu PIN <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Has establecido incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos, se te solicitará que desbloquees tu tableta mediante el uso de tu información de acceso de Google."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
- <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Has establecido incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos, se te solicitará que desbloquees tu teléfono mediante el uso de tu información de acceso de Google."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Has establecido incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos, se te solicitará que desbloquees tu dispositivo mediante el uso de tu información de acceso de Google."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Intentaste desbloquear la tableta <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica de la tableta y se pierdan todos los datos de usuario."</string>
- <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Intentaste desbloquear el teléfono <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica del teléfono y se pierdan todos los datos de usuario."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Intentaste desbloquear el dispositivo <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica del dispositivo y se pierdan todos los datos de usuario."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Intentaste desbloquear la tableta <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo lograste. Se restablecerán los valores predeterminados de fábrica de la tableta."</string>
- <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Intentaste desbloquear el teléfono <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo lograste. Se restablecerán los valores predeterminados de fábrica del teléfono."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Intentaste desbloquear el dispositivo <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo lograste. Se restablecerán los valores predeterminados de fábrica del dispositivo."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Vuelve a intentarlo en <xliff:g id="NUMBER">%d</xliff:g> segundos."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"¿Olvidaste el patrón?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Desbloquear cuenta"</string>
<string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Demasiados intentos incorrectos de creación del patrón"</string>
<string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Para desbloquear, accede con tu cuenta de Google."</string>
- <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Nombre de usuario (correo electrónico)"</string>
+ <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Nombre de usuario (correo)"</string>
<string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Contraseña"</string>
<string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Inicia sesión"</string>
<string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Nombre de usuario o contraseña incorrecta."</string>
<string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"¿Olvidaste tu nombre de usuario o contraseña?"\n"Accede a "<b>"google.com/accounts/recovery"</b>"."</string>
<string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"Comprobando..."</string>
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Desbloquear"</string>
- <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sonido encendido"</string>
- <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Sonido apagado"</string>
+ <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sonido activado"</string>
+ <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Sonido desactivado"</string>
<string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Se inició el patrón"</string>
- <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Se borró el patrón"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Se eliminó el patrón"</string>
<string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Se agregó una celda."</string>
<string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Se completó el patrón"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
@@ -749,7 +749,7 @@
<string name="permdesc_readHistoryBookmarks" msgid="4577476392604595921">"Permite que la aplicación consulte todos los marcadores del navegador y todas las URL que haya visitado."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"escribir historial y marcadores del navegador"</string>
<string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="1757103804824209530">"Permite que la aplicación modifique el historial o los marcadores del navegador guardados en tu tableta. Las aplicaciones maliciosas pueden utilizar este permiso para borrar o modificar los datos de tu navegador."</string>
- <string name="permdesc_writeHistoryBookmarks" product="default" msgid="6693764355720719197">"Permite que la aplicación modifique el historial o los marcadores del navegador guardados en tu teléfono. Las aplicaciones maliciosas pueden utilizar este permiso para borrar o modificar los datos de tu navegador."</string>
+ <string name="permdesc_writeHistoryBookmarks" product="default" msgid="6693764355720719197">"Permite que la aplicación modifique el historial o los marcadores del navegador guardados en tu dispositivo. Las aplicaciones maliciosas pueden utilizar este permiso para borrar o modificar los datos de tu navegador."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"configurar alarma en reloj alarma"</string>
<string name="permdesc_setAlarm" msgid="316392039157473848">"Permite que la aplicación establezca una alarma en una aplicación de alarma instalada. Es posible que algunas aplicaciones de alarma no incluyan esta función."</string>
<string name="permlab_addVoicemail" msgid="5525660026090959044">"agregar correo de voz"</string>
@@ -774,7 +774,7 @@
<string name="search_go" msgid="8298016669822141719">"Buscar"</string>
<string name="searchview_description_search" msgid="6749826639098512120">"Buscar"</string>
<string name="searchview_description_query" msgid="5911778593125355124">"Consulta de búsqueda"</string>
- <string name="searchview_description_clear" msgid="1330281990951833033">"Borrar la consulta"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Eliminar la consulta"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Enviar consulta"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Búsqueda por voz"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"hace 1 mes"</string>
@@ -848,7 +848,7 @@
<item quantity="one" msgid="2178576254385739855">"mañana"</item>
<item quantity="other" msgid="2973062968038355991">"en <xliff:g id="COUNT">%d</xliff:g> días"</item>
</plurals>
- <string name="preposition_for_date" msgid="9093949757757445117">"encendido <xliff:g id="DATE">%s</xliff:g>"</string>
+ <string name="preposition_for_date" msgid="9093949757757445117">"activado <xliff:g id="DATE">%s</xliff:g>"</string>
<string name="preposition_for_time" msgid="5506831244263083793">"a las <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="preposition_for_year" msgid="5040395640711867177">"en <xliff:g id="YEAR">%s</xliff:g>"</string>
<string name="day" msgid="8144195776058119424">"día"</string>
@@ -889,7 +889,7 @@
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acciones de texto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Poco espacio de almacenamiento"</string>
<string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">"Está quedando poco espacio de almacenamiento en el tablet."</string>
- <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"Hay poco espacio de almacenamiento en el teléfono."</string>
+ <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"Hay poco espacio de almacenamiento en el dispositivo."</string>
<string name="ok" msgid="5970060430562524910">"Aceptar"</string>
<string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
<string name="yes" msgid="5362982303337969312">"Aceptar"</string>
@@ -900,7 +900,7 @@
<string name="capital_off" msgid="6815870386972805832">"No"</string>
<string name="whichApplication" msgid="4533185947064773386">"Completar la acción mediante"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Utilizar de manera predeterminada en esta acción."</string>
- <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Borrar valores predeterminados en Configuración del sistema > Aplicaciones > Descargas."</string>
+ <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Eliminar valores predeterminados en Configuración del sistema > Aplicaciones > Descargas."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Seleccionar una acción"</string>
<string name="chooseUsbActivity" msgid="6894748416073583509">"Selecciona una aplicación para el dispositivo USB."</string>
<string name="noApplications" msgid="2991814273936504689">"Ninguna aplicación puede realizar esta acción."</string>
@@ -915,12 +915,13 @@
<string name="force_close" msgid="8346072094521265605">"Aceptar"</string>
<string name="report" msgid="4060218260984795706">"Notificar"</string>
<string name="wait" msgid="7147118217226317732">"Esperar"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"La página no responde."\n\n"¿Deseas cerrarla?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Aplicación redireccionada"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> se está ejecutando ahora."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> se inició originalmente."</string>
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar siempre"</string>
- <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Volver a habilitar Configuración del sistema > Aplicaciones > Descargas"</string>
+ <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Volver a activar Configuración del sistema > Aplicaciones > Descargas"</string>
<string name="smv_application" msgid="3307209192155442829">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) ha infringido su política StrictMode de aplicación automática."</string>
<string name="smv_process" msgid="5120397012047462446">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> ha violado su política StrictMode autoimpuesta."</string>
<string name="android_upgrading_title" msgid="1584192285441405746">"Android se está actualizando..."</string>
@@ -1031,7 +1032,7 @@
<string name="extmedia_format_message" product="default" msgid="14131895027543830">"Se perderán todos los datos de tu tarjeta."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formato"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Depuración de USB conectada"</string>
- <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca para inhabilitar la depuración de USB."</string>
+ <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca para desactivar la depuración de USB."</string>
<string name="select_input_method" msgid="4653387336791222978">"Selecciona el método de introducción"</string>
<string name="configure_input_methods" msgid="9091652157722495116">"Configurar métodos de introducción"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1203,7 +1204,7 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datos de 4 GB desactivados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Datos móviles desactivados"</string>
<string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Datos Wi-Fi desactivados"</string>
- <string name="data_usage_limit_body" msgid="3317964706973601386">"Toca para habilitar."</string>
+ <string name="data_usage_limit_body" msgid="3317964706973601386">"Toca para activar."</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Supera límite de datos de 2G-3G"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Límite de datos de 4G superado"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Límite de datos móviles superado"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index fe6c704..0c526ff 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"Aceptar"</string>
<string name="report" msgid="4060218260984795706">"Informar"</string>
<string name="wait" msgid="7147118217226317732">"Esperar"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"La página no responde."\n\n"¿Quieres cerrarla?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Aplicación redireccionada"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> se está ejecutando."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Inicialmente, se inició la aplicación <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 1a86b9d..5591289 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -73,11 +73,11 @@
<string name="RestrictedOnData" msgid="8653794784690065540">"Andmesideteenus on blokeeritud."</string>
<string name="RestrictedOnEmergency" msgid="6581163779072833665">"Hädaabiteenus on blokeeritud."</string>
<string name="RestrictedOnNormal" msgid="4953867011389750673">"Häälteenus on blokeeritud."</string>
- <string name="RestrictedOnAllVoice" msgid="1459318899842232234">"Kõik häälteenused on blokeeritud."</string>
+ <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"Kõik häälteenused on blokeeritud."</string>
<string name="RestrictedOnSms" msgid="8314352327461638897">"SMS-teenus on blokeeritud."</string>
- <string name="RestrictedOnVoiceData" msgid="8244438624660371717">"Hääl-/andmeteenused on blokeeritud."</string>
+ <string name="RestrictedOnVoiceData" msgid="996636487106171320">"Hääl-/andmeteenused on blokeeritud."</string>
<string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Hääl-/SMS-teenused on blokeeritud."</string>
- <string name="RestrictedOnAll" msgid="2714924667937117304">"Kõik hääl-/andme-/SMS-teenused on blokeeritud."</string>
+ <string name="RestrictedOnAll" msgid="5643028264466092821">"Kõik hääl-/andme-/SMS-teenused on blokeeritud."</string>
<string name="serviceClassVoice" msgid="1258393812335258019">"Hääl"</string>
<string name="serviceClassData" msgid="872456782077937893">"Andmed"</string>
<string name="serviceClassFAX" msgid="5566624998840486475">"FAKS"</string>
@@ -108,27 +108,27 @@
<string name="fcComplete" msgid="3118848230966886575">"Funktsioonikood valmis."</string>
<string name="fcError" msgid="3327560126588500777">"Ühendusprobleem või kehtetu funktsioonikood."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <string name="httpError" msgid="6603022914760066338">"Ilmnes võrgu viga."</string>
- <string name="httpErrorLookup" msgid="4517085806977851374">"URL-i ei leitud."</string>
+ <string name="httpError" msgid="7956392511146698522">"Ilmnes võrgu viga."</string>
+ <string name="httpErrorLookup" msgid="4711687456111963163">"URL-i ei leita."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"Saidi autentimise skeemi ei toetata."</string>
- <string name="httpErrorAuth" msgid="7293960746955020542">"Autentimine ebaõnnestus."</string>
+ <string name="httpErrorAuth" msgid="1435065629438044534">"Autentimine ebaõnnestus."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Puhverserveri kaudu autentimine ebaõnnestus."</string>
- <string name="httpErrorConnect" msgid="7623096283505770433">"Ühendus serveriga ebaõnnestus."</string>
- <string name="httpErrorIO" msgid="4270874999047767599">"Serveril ei õnnestunud sidet luua. Proovige hiljem uuesti."</string>
+ <string name="httpErrorConnect" msgid="8714273236364640549">"Serveriga ei saanud ühendust."</string>
+ <string name="httpErrorIO" msgid="2340558197489302188">"Serveriga ei saanud ühendust. Proovige hiljem uuesti."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Ühendus serveriga aegunud."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Leht sisaldab liiga palju serveri ümbersuunamisi."</string>
<string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"Protokolli ei toetata."</string>
- <string name="httpErrorFailedSslHandshake" msgid="3088290300440289771">"Turvalist ühendust ei saanud luua."</string>
- <string name="httpErrorBadUrl" msgid="6088183159988619736">"Lehte ei saa avada, kuna URL on vale."</string>
- <string name="httpErrorFile" msgid="8250549644091165175">"Faili ei saa avada."</string>
- <string name="httpErrorFileNotFound" msgid="5588380756326017105">"Nõutud faili ei leitud."</string>
+ <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"Turvalist ühendust ei saanud luua."</string>
+ <string name="httpErrorBadUrl" msgid="3636929722728881972">"Lehte pole võimalik avada, kuna URL on vale."</string>
+ <string name="httpErrorFile" msgid="2170788515052558676">"Failile ei pääse juurde."</string>
+ <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Soovitud faili ei leitud."</string>
<string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Töötlemisel on liiga palju taotlusi. Proovige hiljem uuesti."</string>
- <string name="notification_title" msgid="1259940370369187045">"Viga kontole <xliff:g id="ACCOUNT">%1$s</xliff:g> sisselogimisel"</string>
+ <string name="notification_title" msgid="8967710025036163822">"Viga kontole <xliff:g id="ACCOUNT">%1$s</xliff:g> sisselogimisel"</string>
<string name="contentServiceSync" msgid="8353523060269335667">"Sünkroonimine"</string>
<string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sünkroonimine"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Liiga palju üksuse <xliff:g id="CONTENT_TYPE">%s</xliff:g> kustutusi."</string>
- <string name="low_memory" product="tablet" msgid="2292820184396262278">"Tahvelarvuti mälu on täis. Ruumi vabastamiseks kustutage mõned failid."</string>
- <string name="low_memory" product="default" msgid="6632412458436461203">"Telefonimälu on täis. Ruumi vabastamiseks kustutage mõned failid."</string>
+ <string name="low_memory" product="tablet" msgid="6494019234102154896">"Tahvelarvuti mäluruum on täis. Ruumi vabastamiseks kustutage mõned failid."</string>
+ <string name="low_memory" product="default" msgid="3475999286680000541">"Telefonimälu on täis. Ruumi vabastamiseks kustutage mõned failid."</string>
<string name="me" msgid="6545696007631404292">"Mina"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"Tahvelarvuti valikud"</string>
<string name="power_dialog" product="default" msgid="1319919075463988638">"Telefonivalikud"</string>
@@ -137,6 +137,9 @@
<string name="turn_off_radio" msgid="8198784949987062346">"Lülitage raadioside välja"</string>
<string name="screen_lock" msgid="799094655496098153">"Ekraanilukk"</string>
<string name="power_off" msgid="4266614107412865048">"Lülita välja"</string>
+ <string name="silent_mode_silent" msgid="319298163018473078">"Helin on väljas"</string>
+ <string name="silent_mode_vibrate" msgid="7072043388581551395">"Vibreeriv helin"</string>
+ <string name="silent_mode_ring" msgid="8592241816194074353">"Helin on sees"</string>
<string name="shutdown_progress" msgid="2281079257329981203">"Väljalülitamine ..."</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Teie tahvelarvuti lülitub välja."</string>
<string name="shutdown_confirm" product="default" msgid="649792175242821353">"Teie telefon lülitub välja."</string>
@@ -157,16 +160,16 @@
<string name="safeMode" msgid="2788228061547930246">"Turvarežiim"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android-süsteem"</string>
<string name="permgrouplab_costMoney" msgid="5429808217861460401">"Tasulised teenused"</string>
- <string name="permgroupdesc_costMoney" msgid="8596717365335027057">"Võimaldab rakendustel teha tasulisi toiminguid."</string>
+ <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"Tasuliste toimingute tegemine."</string>
<string name="permgrouplab_messages" msgid="7521249148445456662">"Teie sõnumid"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Teie SMS-, meili- ja muude sõnumite lugemine ja kirjutamine."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Teie isiklikud andmed"</string>
<string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Otsene juurdepääs tahvelarvutisse salvestatud kontaktidele ja kalendrile."</string>
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Otsene juurdepääs telefoni salvestatud kontaktidele ja kalendrile."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Teie asukoht"</string>
- <string name="permgroupdesc_location" msgid="2430258821648348660">"Jälgige oma füüsilist asukohta"</string>
+ <string name="permgroupdesc_location" msgid="5704679763124170100">"Jälgige oma füüsilist asukohta."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Võrgusuhtlus"</string>
- <string name="permgroupdesc_network" msgid="4917593670797570584">"Võimaldab rakendustel pääseda juurde erinevatele võrgufunktsioonidele."</string>
+ <string name="permgroupdesc_network" msgid="4478299413241861987">"Juurdepääs erinevatele võrgufunktsioonidele."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Teie kontod"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Juurdepääs saadaolevatele kontodele."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Riistvara juhtelemendid"</string>
@@ -206,16 +209,16 @@
<string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Võimaldab rakendusel kirjutada teie telefoni või SIM-kaardile salvestatud SMS-sõnumitesse. Pahatahtlikud rakendused võivad teie sõnumid kustutada."</string>
<string name="permlab_receiveWapPush" msgid="8258226427716551388">"võta WAP vastu"</string>
<string name="permdesc_receiveWapPush" msgid="7983455145335316872">"Võimaldab rakendusel vastu võtta ja töödelda WAP-sõnumeid. Pahatahtlikud rakendused võivad teie sõnumeid jälgida või neid kustutada teile näitamata."</string>
- <string name="permlab_getTasks" msgid="6466095396623933906">"käitatud rakenduste toomine"</string>
+ <string name="permlab_getTasks" msgid="6466095396623933906">"Käitatud rakenduste toomine"</string>
<string name="permdesc_getTasks" msgid="6608159250520381359">"Võimaldab rakendusel hankida teavet praegu töötavate ja hiljuti töötanud ülesannete kohta. Pahatahtlikud rakendused võivad avastada privaatset teavet teiste rakenduste kohta."</string>
<string name="permlab_reorderTasks" msgid="2018575526934422779">"käitatud rakenduste ümberjärjestamine"</string>
<string name="permdesc_reorderTasks" msgid="4175137612205663399">"Võimaldab rakendusel teisaldada ülesanded esiplaanile ja taustale. Pahatahtlikud rakendused võivad sundida end esiplaanile tulema teie loata."</string>
<string name="permlab_removeTasks" msgid="6821513401870377403">"käitatud rakenduste peatamine"</string>
- <string name="permdesc_removeTasks" msgid="1000226123143185094">"Võimaldab rakendusel eemaldada ülesandeid ja peatada nende rakendused. Pahatahtlikud rakendused võivad häirida teiste rakenduste käitumist."</string>
+ <string name="permdesc_removeTasks" msgid="1394714352062635493">"Võimaldab rakendusel eemaldada ülesanded ja peatada nende rakendused. Pahatahtlikud rakendused võivad häirida teiste rakenduste käitumist."</string>
<string name="permlab_setDebugApp" msgid="3022107198686584052">"Rakenduse silumise lubamine"</string>
- <string name="permdesc_setDebugApp" msgid="6215654419903651172">"Võimaldab rakendusel lülitada sisse teise rakenduse silumise. Pahatahtlikud rakendused võivad seda kasutada teiste rakenduste peatamiseks."</string>
+ <string name="permdesc_setDebugApp" msgid="4474512416299013256">"Võimaldab rakendusel lülitada sisse teise rakenduse silumise. Pahatahtlikud rakendused võivad seda kasutada teiste rakenduste peatamiseks."</string>
<string name="permlab_changeConfiguration" msgid="8214475779521218295">"muuda UI-seadeid"</string>
- <string name="permdesc_changeConfiguration" msgid="4104052649900380324">"Võimaldab rakendusel muuta praegust konfiguratsiooni, näiteks lokaati või üldist kirjasuurust."</string>
+ <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Võimaldab rakendusel muuta praegust konfiguratsiooni, näiteks lokaati või üldist kirjasuurust."</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"autorežiimi lubamine"</string>
<string name="permdesc_enableCarMode" msgid="4853187425751419467">"Võimaldab rakendusel autorežiimi lubada."</string>
<string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"taustaprotsesside peatamine"</string>
@@ -251,11 +254,11 @@
<string name="permlab_confirm_full_backup" msgid="5557071325804469102">"täieliku varukoopia kinnitamine või toimingu taastamine"</string>
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Võimaldab rakendusel käivitada täieliku varukoopia kinnitusliidese. Mitte kasutada üheski rakenduses."</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"kuva volituseta aknad"</string>
- <string name="permdesc_internalSystemWindow" msgid="6510907081810231374">"Võimaldab rakendusel luua aknaid, mis on mõeldud süsteemisisesele kasutajaliidesele. Mitte kasutada tavarakenduste puhul."</string>
+ <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Võimaldab rakendusel luua aknaid, mis on mõeldud kasutamiseks süsteemisisesele kasutajaliidesele. Mitte kasutada tavarakenduste puhul."</string>
<string name="permlab_systemAlertWindow" msgid="3372321942941168324">"kuva süsteemitasemel märguandeid"</string>
<string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"Võimaldab rakendusel kuvada süsteemihoiatuste aknaid. Pahatahtlikud rakendused võivad hõlmata kogu ekraani."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"muuda üldist animatsioonikiirust"</string>
- <string name="permdesc_setAnimationScale" msgid="6505093307223395456">"Võimaldab rakendusel muuta igal ajal üldist animatsiooni kiirust (animatsioone kiirendada või aeglustada)."</string>
+ <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Võimaldab rakendusel muuta animatsiooni üldist kiirust (animatsioone kiirendada või aeglustada) ükskõik millal."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"Rakenduse lubade haldamine"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Võimaldab rakendusel luua ja hallata tema enda lube, möödudes tavapärasest Z-järjekorrast. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"vajuta klahve ja juhtnuppe"</string>
@@ -266,9 +269,9 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"seo sisestusmeetodiga"</string>
<string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Lubab omanikul siduda sisestusmeetodi ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"tekstiteenusega sidumine"</string>
- <string name="permdesc_bindTextService" msgid="8151968910973998670">"Võimaldab omanikul siduda tekstiteenuse (nt SpellCheckerService) ülataseme liidest. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
+ <string name="permdesc_bindTextService" msgid="8151968910973998670">"Võimaldab omanikul siduda tekstiteenuse (nt SpellCheckerService) ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
<string name="permlab_bindVpnService" msgid="4708596021161473255">"seo VPN-teenusega"</string>
- <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Võimaldab omanikul siduda vidina teenuse ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
+ <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Võimaldab omanikul siduda VPN-teenuse ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"taustapildiga sidumine"</string>
<string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Lubab omanikul siduda taustapildi ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vidinateenusega sidumine"</string>
@@ -292,7 +295,7 @@
<string name="permlab_getPackageSize" msgid="7472921768357981986">"Rakenduse mäluruumi mõõtmine"</string>
<string name="permdesc_getPackageSize" msgid="3921068154420738296">"Võimaldab rakendusel tuua oma koodi, andmed ja vahemälu suurused"</string>
<string name="permlab_installPackages" msgid="2199128482820306924">"Rakenduste otse installimine"</string>
- <string name="permdesc_installPackages" msgid="5628530972548071284">"Võimaldab rakendusel installida uusi või värskendatud Android-pakette. Pahatahtlikud rakendused võivad seda kasutada uute rakenduste lisamiseks omavoliliselt võimsate õigustega."</string>
+ <string name="permdesc_installPackages" msgid="5628530972548071284">"Võimaldab rakendusel installida uusi või värskendatud Android-pakette. Pahatahtlikud rakendused võivad selle abil lisada uusi meelevaldse tegevuse lubadega rakendusi."</string>
<string name="permlab_clearAppCache" msgid="7487279391723526815">"Kõigi rakenduse vahemäluandmete kustutamine"</string>
<string name="permdesc_clearAppCache" product="tablet" msgid="3523396284474042284">"Võimaldab rakendusel vabastada tahvelarvuti mälu, kustutades faile otse rakenduse kataloogist. Süsteem on juurdepääsu sellele harilikult väga piiranud."</string>
<string name="permdesc_clearAppCache" product="default" msgid="5067988373366292186">"Võimaldab rakendusel vabastada telefoni mälu, kustutades faile otse rakenduse kataloogist. Süsteem on juurdepääsu sellele harilikult väga piiranud."</string>
@@ -301,6 +304,8 @@
<string name="permlab_readLogs" msgid="6615778543198967614">"tundlike logiandmete lugemine"</string>
<string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Võimaldab rakendusel lugeda süsteemi erinevaid logifaile. Nii on võimalik avastada üldist teavet selle kohta, mida te tahvelarvutiga teete, sh isiklikku või privaatset teavet."</string>
<string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Võimaldab rakendusel lugeda süsteemi erinevaid logifaile. Nii on võimalik avastada üldist teavet selle kohta, mida te telefoniga teete, mis võib kaasata ka isiklikku või privaatset teavet."</string>
+ <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"Mis tahes meediumidekooderi kasutamine taasesituseks"</string>
+ <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Võimaldab rakendusel taasesituseks kasutada mis tahes installitud meediumidekooderit."</string>
<string name="permlab_diagnostic" msgid="8076743953908000342">"loe/kirjuta valija allikaid"</string>
<string name="permdesc_diagnostic" msgid="6608295692002452283">"Võimaldab rakendusel lugeda valimisrühma mis tahes ressurssi ja sellesse kirjutada (näiteks kaustas /dev olevad failid). See võib mõjutada süsteemi stabiilsust ja turvet. Seda tohiks kasutada tootja või operaator AINULT riistvaraspetsiifiliseks diagnostikaks."</string>
<string name="permlab_changeComponentState" msgid="6335576775711095931">"Rakenduse komponentide lubamine või keelamine"</string>
@@ -335,7 +340,7 @@
<string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"Sotsiaalvoogu kirjutamine"</string>
<string name="permdesc_writeSocialStream" product="default" msgid="3496277176955721451">"Võimaldab rakendusel kuvada sõprade suhtlusuudiseid. Pahatahtlikud rakendused saavad selle abil teie sõpra teeselda ja meelitada teid avaldama paroole või muud konfidentsiaalset teavet."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"kalendrisündmuste lugemine ja konfidentsiaalne teave"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="2338414551004122687">"Võimaldab rakendusel lugeda kõiki teie tahvelarvutisse salvestatud kalendrisündmusi, sh teie sõprade või töökaaslaste omi. Pahatahtlikud rakendused võivad nendest kalendritest välja võtta isiklikku teavet ilma teadmiseta."</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="2338414551004122687">"Võimaldab rakendusel lugeda kõiki teie tahvelarvutisse salvestatud kalendrisündmusi, sh teie sõprade või töökaaslaste omi. Pahatahtlikud rakendused võivad nendest kalendritest välja võtta isiklikku teavet ilma omanike teadmata."</string>
<string name="permdesc_readCalendar" product="default" msgid="5693933067751827753">"Võimaldab rakendusel lugeda kõiki teie telefoni salvestatud kalendrisündmusi, sh teie sõprade või töökaaslaste omi. Pahatahtlikud rakendused võivad nendest kalendritest välja võtta isiklikku teavet omaniku teadmiseta."</string>
<string name="permlab_writeCalendar" msgid="8438874755193825647">"kalendrisündmuste lisamine või muutmine ja külalistele omanike teadmata meili saatmine"</string>
<string name="permdesc_writeCalendar" msgid="2243771395254848873">"Võimaldab rakendusel saata sündmusekutseid kalendri omanikuna ning lisada, eemaldada või muuta sündmusi, mida saate oma seadmel muuta, sh oma sõprade või töökaaslaste omi. Pahatahtlikud rakendused võivad saata rämpsposti, mis näib olevat tulnud kalendriomanikelt, muuta sündmusi omanike teadmata või lisada võltssündmusi."</string>
@@ -434,7 +439,7 @@
<string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Võimaldab rakendusel muuta tahvelarvuti ajavööndit."</string>
<string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Võimaldab rakendusel muuta telefoni ajavööndit."</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"AccountManagerService\'ina tegutsemine"</string>
- <string name="permdesc_accountManagerService" msgid="2684502137670299915">"Võimaldab rakendusel helistada konto autentijatele."</string>
+ <string name="permdesc_accountManagerService" msgid="1948455552333615954">"Võimaldab rakendusel helistada konto autentijatele."</string>
<string name="permlab_getAccounts" msgid="4549918644233460103">"leia teadaolevad kontod"</string>
<string name="permdesc_getAccounts" product="tablet" msgid="3238360555257773358">"Võimaldab rakendusel hankida tahvelarvutile teadaolevate kontode loendi."</string>
<string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Võimaldab rakendusel saada telefonile teadaolevate kontode loendi."</string>
@@ -465,6 +470,10 @@
<string name="permlab_bluetoothAdmin" msgid="3606576270792236062">"Bluetoothi haldamine"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Võimaldab rakendusel seadistada kohalikku Bluetooth-tahvelarvutit ning leida ja siduda seda kaugseadmetega."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Võimaldab rakendusel seadistada kohalikku Bluetooth-telefoni ning leida ja siduda seda kaugseadmetega."</string>
+ <string name="permlab_accessWimaxState" msgid="1232061307208861588">"WiMAX-i oleku kuvamine"</string>
+ <string name="permdesc_accessWimaxState" msgid="5914958077555177749">"Võimaldab rakendusel vaadata WiMAX-i olekuteavet."</string>
+ <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX-i oleku muutmine"</string>
+ <string name="permdesc_changeWimaxState" msgid="3328853825006455912">"Võimaldab rakendusel luua ja katkestada ühenduse WiMAX-i võrguga."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"loo Bluetooth-ühendusi"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="7007851048416363446">"Võimaldab rakendusel vaadata kohaliku Bluetooth-tahvelarvuti konfiguratsiooni ning luua ja heaks kiita ühendusi seotud seadmetega."</string>
<string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Võimaldab rakendusel vaadata kohaliku Bluetooth-telefoni konfiguratsiooni ning luua ja heaks kiita ühendusi seotud seadmetega."</string>
@@ -501,27 +510,27 @@
<string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"võrgueeskirjade haldamine"</string>
<string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Võimaldab rakendusel hallata võrgueeskirju ja määratleda rakendusespetsiifilisi reegleid."</string>
<string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"võrgukasutuse arvestamise muutmine"</string>
- <string name="permdesc_modifyNetworkAccounting" msgid="8553240749784321765">"Võimaldab rakendusel muuta võrgukasutuse loendamist rakenduste suhtes. Mitte kasutada tavarakenduste puhul."</string>
+ <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Võimaldab rakendusel muuta võrgukasutuse loendamist rakenduste suhtes. Mitte kasutada tavarakenduste puhul."</string>
<string name="policylab_limitPassword" msgid="4497420728857585791">"Parooli reeglite määramine"</string>
- <string name="policydesc_limitPassword" msgid="9083400080861728056">"Ekraaniluku paroolide lubatud pikkuse ja tähemärkide kontrollimine"</string>
+ <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kontrollige ekraaniluku avamise paroolide pikkust ja tähemärke."</string>
<string name="policylab_watchLogin" msgid="914130646942199503">"Ekraani avamiskatsed"</string>
<string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Jälgib ekraani avamisel valesti sisestatud paroolide arvu ja lukustab tahvelarvuti või kustutab kõik selle andmed, kui vale parool sisestatakse liiga palju kordi."</string>
<string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Jälgib ekraani avamisel valesti sisestatud paroolide arvu ja lukustab telefoni või kustutab kõik selle andmed, kui vale parool sisestatakse liiga palju kordi."</string>
<string name="policylab_resetPassword" msgid="2620077191242688955">"Ekraaniluku parooli muutmine"</string>
- <string name="policydesc_resetPassword" msgid="5391240616981297361">"Ekraaniluku parooli muutmine"</string>
+ <string name="policydesc_resetPassword" msgid="605963962301904458">"Ekraaniluku parooli muutmine."</string>
<string name="policylab_forceLock" msgid="2274085384704248431">"Ekraani lukustamine"</string>
- <string name="policydesc_forceLock" msgid="5696964126226028442">"Juhtige, kuidas ja millal ekraan lukustub"</string>
+ <string name="policydesc_forceLock" msgid="1141797588403827138">"Määrake, kuidas ja millal ekraan lukustub."</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Kõikide andmete kustutamine"</string>
- <string name="policydesc_wipeData" product="tablet" msgid="314455232799486222">"Tahvelarvuti andmete hoiatuseta kustutamine, lähtestades tehaseandmed"</string>
- <string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"Telefoniandmete hoiatuseta kustutamine, lähtestades tehaseandmed"</string>
+ <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Kustutage tahvelarvuti andmed hoiatamata, lähtestades arvuti tehaseandmetele."</string>
+ <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Kustuta telefoniandmed hoiatuseta, lähtestades telefoni tehaseandmetele."</string>
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Määra seadme globaalne puhverserver"</string>
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Eeskirjade lubamise ajal kasutatava seadme globaalse puhverserveri määramine. Ainult esimese seadme administraator määrab tõhusa globaalse puhverserveri."</string>
<string name="policylab_expirePassword" msgid="885279151847254056">"Ekraaniluku parooli aegumise määramine"</string>
- <string name="policydesc_expirePassword" msgid="4844430354224822074">"Juhib, kui sageli ekraaniluku parooli tuleb muuta"</string>
+ <string name="policydesc_expirePassword" msgid="1729725226314691591">"Määrake ekraaniluku parooli muutmissagedus."</string>
<string name="policylab_encryptedStorage" msgid="8901326199909132915">"Salvestamise krüpt. määramine"</string>
- <string name="policydesc_encryptedStorage" msgid="8877192718681120469">"Nõue, et salvestatud rakenduse andmed krüpteeritakse"</string>
+ <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Nõua salvestatud rakenduse andmete krüpteerimist."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Keela kaamerad"</string>
- <string name="policydesc_disableCamera" msgid="5680054212889413366">"Väldi kõigi seadme kaamerate kasutamist"</string>
+ <string name="policydesc_disableCamera" msgid="2306349042834754597">"Vältige seadme kõigi kaamerate kasutamist."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Kodu"</item>
<item msgid="869923650527136615">"Mobiil"</item>
@@ -642,7 +651,7 @@
<string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Puudutage parooli sisestamiseks"</font></string>
<string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Avamiseks sisestage parool"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Avamiseks sisestage PIN-kood"</string>
- <string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Vale PIN-kood."</string>
+ <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Vale PIN-kood."</string>
<string name="keyguard_label_text" msgid="861796461028298424">"Avamiseks vajutage menüüklahvi, seejärel klahvi 0."</string>
<string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Hädaabinumber"</string>
<string name="lockscreen_carrier_default" msgid="8963839242565653192">"Teenus puudub."</string>
@@ -655,6 +664,7 @@
<string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Õige."</string>
<string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Proovige uuesti"</string>
<string name="lockscreen_password_wrong" msgid="5737815393253165301">"Proovige uuesti"</string>
+ <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maksimaalne teenusega Face Unlock avamise katsete arv on ületatud"</string>
<string name="lockscreen_plugged_in" msgid="8057762828355572315">"Laadimine, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_charged" msgid="4938930459620989972">"Laetud."</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
@@ -688,14 +698,14 @@
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Proovige uuesti <xliff:g id="NUMBER">%d</xliff:g> sekundi pärast."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Kas unustasite mustri?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Konto avamine"</string>
- <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"Liiga palju mustrikatseid."</string>
- <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Avamiseks logige sisse oma Google\'i kontoga"</string>
+ <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Liiga palju mustrikatseid"</string>
+ <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Avamiseks logige sisse oma Google\'i kontoga."</string>
<string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Kasutajanimi (e-post)"</string>
<string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Parool"</string>
<string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Logi sisse"</string>
<string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Vale kasutajanimi või parool."</string>
- <string name="lockscreen_glogin_account_recovery_hint" msgid="8253152905532900548">"Kas unustasite oma kasutajanime või parooli?"\n"Külastage aadressi "<b>"google.com/accounts/recovery"</b></string>
- <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Kontrollimine ..."</string>
+ <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"Kas unustasite oma kasutajanime või parooli?"\n"Külastage aadressi "<b>"google.com/accounts/recovery"</b>"."</string>
+ <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"Kontrollimine ..."</string>
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Ava"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Heli sisse"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Heli välja"</string>
@@ -712,13 +722,13 @@
<string name="factorytest_not_system" msgid="4435201656767276723">"Toimingut FACTORY_TEST toetatakse ainult kausta \\system\\app installitud pakettide puhul."</string>
<string name="factorytest_no_action" msgid="872991874799998561">"Ei leitud ühtegi paketti, mis võimaldaks toimingut FACTORY_TEST."</string>
<string name="factorytest_reboot" msgid="6320168203050791643">"Taaskäivita"</string>
- <string name="js_dialog_title" msgid="8143918455087008109">"Veebileht aadressil <xliff:g id="TITLE">%s</xliff:g> ütleb:"</string>
+ <string name="js_dialog_title" msgid="1987483977834603872">"Leht „<xliff:g id="TITLE">%s</xliff:g>” ütleb järgmist."</string>
<string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
- <string name="js_dialog_before_unload" msgid="730366588032430474">"Kas soovite sellelt lehelt lahkuda?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Jätkamiseks puudutage OK, praegusele lehele jäämiseks valikut Tühista."</string>
+ <string name="js_dialog_before_unload" msgid="730366588032430474">"Kas soovite sellelt lehelt lahkuda?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Jätkamiseks puudutage valikut OK, praegusele lehele jäämiseks valikut Tühista."</string>
<string name="save_password_label" msgid="6860261758665825069">"Kinnita"</string>
- <string name="double_tap_toast" msgid="2729045387923870404">"Vihje: suurendamiseks ja vähendamiseks puudutage kaks korda."</string>
- <string name="autofill_this_form" msgid="1272247532604569872">"Autom."</string>
- <string name="setup_autofill" msgid="8154593408885654044">"Aut. täit. sead."</string>
+ <string name="double_tap_toast" msgid="4595046515400268881">"Vihje: suurendamiseks ja vähendamiseks puudutage kaks korda."</string>
+ <string name="autofill_this_form" msgid="4616758841157816676">"Automaatne täitmine"</string>
+ <string name="setup_autofill" msgid="7103495070180590814">"Automaatse täitmise seadistamine"</string>
<string name="autofill_address_name_separator" msgid="2504700673286691795">" "</string>
<string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
<string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
@@ -853,9 +863,9 @@
<string name="weeks" msgid="6509623834583944518">"nädalat"</string>
<string name="year" msgid="4001118221013892076">"aasta"</string>
<string name="years" msgid="6881577717993213522">"aastat"</string>
- <string name="VideoView_error_title" msgid="5927895235831021723">"Videot ei saa esitada"</string>
+ <string name="VideoView_error_title" msgid="3534509135438353077">"Probleem videoga"</string>
<string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"See video ei sobi voogesituseks selles seadmes."</string>
- <string name="VideoView_error_text_unknown" msgid="4309847331399592194">"Seda videot ei saa esitada."</string>
+ <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"Videot ei saa esitada."</string>
<string name="VideoView_error_button" msgid="2822238215100679592">"OK"</string>
<string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="noon" msgid="7245353528818587908">"keskpäev"</string>
@@ -891,7 +901,7 @@
<string name="whichApplication" msgid="4533185947064773386">"Lõpetage toiming rakendusega"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Kasuta vaikimisi selleks toiminguks."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Tühjendage vaikeandmed valikutes Süsteemiseaded > Rakendused > Allalaaditud."</string>
- <string name="chooseActivity" msgid="1009246475582238425">"Valige toiming"</string>
+ <string name="chooseActivity" msgid="7486876147751803333">"Toimingu valimine"</string>
<string name="chooseUsbActivity" msgid="6894748416073583509">"USB-seadme jaoks rakenduse valimine"</string>
<string name="noApplications" msgid="2991814273936504689">"Ükski rakendus ei saa seda toimingut teostada."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
@@ -905,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Teata"</string>
<string name="wait" msgid="7147118217226317732">"Oodake"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Leht ei reageeri."\n\n"Kas soovite selle sulgeda?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Rakendus on ümber suunatud"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> on nüüd käivitunud."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Algselt käivitati rakendus <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
@@ -925,11 +936,11 @@
<string name="old_app_description" msgid="2082094275580358049">"Ärge käivitage uut rakendust."</string>
<string name="new_app_action" msgid="5472756926945440706">"Käivitage rakendus <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
<string name="new_app_description" msgid="1932143598371537340">"Peatage vana rakendus salvestamata."</string>
- <string name="sendText" msgid="5132506121645618310">"Valige teksti jaoks toiming"</string>
+ <string name="sendText" msgid="5209874571959469142">"Valige teksti jaoks toiming"</string>
<string name="volume_ringtone" msgid="6885421406845734650">"Helina helitugevus"</string>
<string name="volume_music" msgid="5421651157138628171">"Meediumi helitugevus"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Esitatakse Bluetoothi kaudu"</string>
- <string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"Valitud on hääletu helin"</string>
+ <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Valitud on hääletu märguanne"</string>
<string name="volume_call" msgid="3941680041282788711">"Kõne helitugevus"</string>
<string name="volume_bluetooth_call" msgid="2002891926351151534">"Bluetoothi kõne helitugevus"</string>
<string name="volume_alarm" msgid="1985191616042689100">"Alarmi helitugevus"</string>
@@ -953,17 +964,22 @@
<item quantity="one" msgid="1634101450343277345">"Avatud WiFi võrk on saadaval"</item>
<item quantity="other" msgid="7915895323644292768">"Avatud WiFi-võrgud on saadaval"</item>
</plurals>
- <string name="wifi_available_sign_in" msgid="9157196203958866662">"Logi sisse WiFi-võrku"</string>
+ <string name="wifi_available_sign_in" msgid="4029489716605255386">"Logige sisse WiFi-võrku"</string>
<!-- no translation found for wifi_available_sign_in_detailed (6797764740339907572) -->
<skip />
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ei saanud WiFi-ga ühendust"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4917472096696322767">" on halb Interneti-ühendus."</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" on halb Interneti-ühendus."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"WiFi Direct"</string>
- <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Käivitage WiFi Directi töö. See lülitab WiFi-kliendi/-tööpunkti töö välja."</string>
- <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Otsese WiFi-ühenduse käivitamine ebaõnnestus"</string>
- <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"WiFi Directi ühenduse seadistamise taotlus seadmelt <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Nõustumiseks klõpsake OK."</string>
- <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"WiFi Directi ühenduse seadistuse taotlus seadmelt <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Jätkamiseks sisestage PIN-kood."</string>
- <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Jätkamiseks tuleb ühenduse seadistamise eesmärgil sisestada partnerseadmesse <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> WPS-i PIN-kood <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>."</string>
+ <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Käivitage WiFi otseühendus. See lülitab välja WiFi kliendi/leviala."</string>
+ <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"WiFi otseühenduse käivitamine ebaõnnestus."</string>
+ <string name="accept" msgid="1645267259272829559">"Nõustu"</string>
+ <string name="decline" msgid="2112225451706137894">"Keeldu"</string>
+ <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"Kutse on saadetud"</string>
+ <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Kutse ühendamiseks"</string>
+ <string name="wifi_p2p_from_message" msgid="570389174731951769">"Saatja:"</string>
+ <string name="wifi_p2p_to_message" msgid="248968974522044099">"Saaja:"</string>
+ <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Sisestage nõutav PIN-kood:"</string>
+ <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN-kood:"</string>
<string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"WiFi Direct on sees"</string>
<string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Puuted seadete jaoks"</string>
<string name="select_character" msgid="3365550120617701745">"Sisesta tähemärk"</string>
@@ -976,7 +992,7 @@
<string name="sim_removed_message" msgid="2333164559970958645">"Mobiilsidevõrk ei ole saadaval, kuni sisestate kehtiva SIM-kaardi ja taaskäivitate seadme."</string>
<string name="sim_done_button" msgid="827949989369963775">"Valmis"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM-kaart lisatud"</string>
- <string name="sim_added_message" msgid="1209265974048554242">"Mobiilsidevõrku pääsemiseks peate oma seadme taaskäivitama."</string>
+ <string name="sim_added_message" msgid="6599945301141050216">"Mobiilsidevõrku pääsemiseks taaskäivitage seade."</string>
<string name="sim_restart_button" msgid="4722407842815232347">"Taaskäivita"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Kellaaja määramine"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Kuupäeva määramine"</string>
@@ -985,31 +1001,31 @@
<string name="no_permissions" msgid="7283357728219338112">"Lube pole vaja"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Peida"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Näita kõiki"</b></string>
- <string name="usb_storage_activity_title" msgid="2399289999608900443">"USB-massmälu"</string>
+ <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-massmälu"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB ühendatud"</string>
- <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Olete arvutiga USB kaudu ühendatud. Puudutage allolevat nuppu, kui soovite faile arvuti ja Androidi USB-mäluseadme vahel kopeerida."</string>
- <string name="usb_storage_message" product="default" msgid="4510858346516069238">"Olete arvutiga USB kaudu ühendatud. Puudutage allolevat nuppu, kui soovite faile arvuti ja Androidi SD-kaardi vahel kopeerida."</string>
+ <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Teil on arvutiga ühendus USB kaudu. Puudutage allolevat nuppu, kui soovite faile arvuti ja Androidi USB-salvestusruumi vahel kopeerida."</string>
+ <string name="usb_storage_message" product="default" msgid="805351000446037811">"Olete arvutiga ühendatud USB kaudu. Puudutage allolevat nuppu, kui soovite faile arvuti ja Androidi SD-kaardi vahel kopeerida."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Lülita USB-mäluseade sisse"</string>
- <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Probleem USB-mäluseadme kasutamisel USB-mäluseadmena."</string>
- <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Probleem SD-kaardi kasutamisel USB-mäluseadmena."</string>
+ <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"Probleem USB-salvestusruumi kasutamisel USB-mäluseadmena."</string>
+ <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"Probleem SD-kaardi kasutamisel USB-mäluseadmena."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB ühendatud"</string>
- <string name="usb_storage_notification_message" msgid="7380082404288219341">"Valige failide kopeerimiseks arvutist/arvutisse."</string>
+ <string name="usb_storage_notification_message" msgid="939822783828183763">"Puudutage, et kopeerida faile arvutist/arvutisse."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Lülita USB-mäluseade välja"</string>
- <string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Valige USB-mäluseadme väljalülitamiseks."</string>
+ <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"USB-salvestusruumi väljalülitamiseks puudutage."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB kasutusel"</string>
- <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Enne USB-mäluseadme väljalülitamist veenduge, et olete oma Androidi USB-mäluseadme arvutist eemaldanud (väljutanud)."</string>
- <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Enne USB-seadme väljalülitamist veenduge, et olete oma Androidi SD-kaardi arvutist eemaldanud (“väljutanud“)."</string>
+ <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"Enne USB-salvestusruumi väljalülitamist eraldage (väljutage) Androidi USB-salvestusruum arvutist."</string>
+ <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"Enne USB-salvestusruumi väljalülitamist eemaldage (väljutage) Androidi SD-kaart arvutist."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Lülita USB-mäluseade välja"</string>
- <string name="usb_storage_stop_error_message" msgid="143881914840412108">"USB-mäluseadme väljalülitamisel ilmnes probleem. Veenduge, et olete USB-hosti eemaldanud ja proovige siis uuesti."</string>
+ <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"Tekkis probleem USB-salvestusruumi väljalülitamisega. Kontrollige, kas olete USB-hosti eemaldanud, ja proovige seejärel uuesti."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Lülita USB-mäluseade sisse"</string>
- <string name="dlg_confirm_kill_storage_users_text" msgid="6206212680430268343">"USB-seadme sisselülitamisel peatuvad mõned teie kasutatavad rakendused ja on võimalik, et neid ei saa kasutada seni, kuni USB-seadme välja lülitate."</string>
+ <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"Kui lülitate USB-salvestusruumi sisse, võivad mõned kasutatavad rakendused peatuda ega pruugi olla saadaval enne USB-salvestusruumi väljalülitamist."</string>
<string name="dlg_error_title" msgid="7323658469626514207">"USB toiming ebaõnnestus"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Ühendatud meediumiseadmena"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Ühendatud kaamerana"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Ühendatud installijana"</string>
<string name="usb_accessory_notification_title" msgid="7848236974087653666">"Ühendatud USB-lisaseadmega"</string>
- <string name="usb_notification_message" msgid="4447869605109736382">"Puudutage teiste USB-valikute kuvamiseks"</string>
+ <string name="usb_notification_message" msgid="2290859399983720271">"Puudutage teisi USB valikuid."</string>
<string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Vormind. USB-seade?"</string>
<string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Kas vormindada SD-kaart?"</string>
<string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Kõik USB-mäluseadmele salvestatud failid kustutatakse. Seda toimingut ei saa tagasi võtta."</string>
@@ -1027,12 +1043,12 @@
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Vigade kontrollimine."</string>
<string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Tühi USB-mäluseade"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Tühi SD-kaart"</string>
- <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"USB-mäluseade on tühi või toetuseta failisüsteemiga."</string>
- <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD-kaart on tühi või toetuseta failisüsteemiga."</string>
+ <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"USB-salvestusruum on tühi või ei toeta failisüsteemi."</string>
+ <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"SD-kaart on tühi või ei toetata selle failisüsteemi."</string>
<string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Kahjustatud USB-mäluseade"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Kahjustatud SD-kaart"</string>
- <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"USB-mäluseade on kahjustatud. Võib-olla peate selle uuesti vormindama."</string>
- <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD-kaart on kahjustatud. Võib-olla peale selle uuesti vormindama."</string>
+ <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"USB-salvestusruum on kahjustatud. Proovige uuesti vormindada."</string>
+ <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"SD-kaart on kahjustatud. Proovige uuesti vormindada."</string>
<string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"USB-seade eemaldati ootamatult"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD-kaart on ootamatult eemaldatud"</string>
<string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Andmekao vältimiseks lahutage USB-mäluseade enne eemaldamist."</string>
@@ -1045,13 +1061,13 @@
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Eemaldatud SD-kaart"</string>
<string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USB-mäluseade eemaldatud. Sisestage uus meedium."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD-kaart on eemaldatud. Sisestage uus."</string>
- <string name="activity_list_empty" msgid="4168820609403385789">"Sobivat tegevust ei leitud"</string>
+ <string name="activity_list_empty" msgid="1675388330786841066">"Sobivat tegevust ei leitud"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"värskenda komponentide kasutusstatistikat"</string>
<string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"Võimaldab rakendusel muuta komponendi kohta kogutud kasutusstatistikat. Mitte kasutada tavarakenduste puhul."</string>
<string name="permlab_copyProtectedData" msgid="4341036311211406692">"Sisu kopeerimine"</string>
<string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Võimaldab rakendusel võtta sisu kopeerimiseks appi vaikekonteinerteenuse. Mitte kasutada tavarakenduste puhul."</string>
<string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Suumi juhtimiseks puudutage kaks korda"</string>
- <string name="gadget_host_error_inflating" msgid="2613287218853846830">"Viga vidina täitmisel"</string>
+ <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Vidinat ei saanud lisada."</string>
<string name="ime_action_go" msgid="8320845651737369027">"Mine"</string>
<string name="ime_action_search" msgid="658110271822807811">"Otsing"</string>
<string name="ime_action_send" msgid="2316166556349314424">"Saada"</string>
@@ -1063,35 +1079,35 @@
<string name="create_contact_using" msgid="4947405226788104538">"Loo kontakt"\n"numbriga <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Üks või mitu rakendust taotlevad luba pääseda nüüd ja edaspidi teie kontole juurde."</string>
<string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Kas soovite taotluse lubada?"</string>
- <string name="grant_permissions_header_text" msgid="2722567482180797717">"Juurdepääsutaotlus"</string>
+ <string name="grant_permissions_header_text" msgid="6874497408201826708">"Juurdepääsutaotlus"</string>
<string name="allow" msgid="7225948811296386551">"Luba"</string>
<string name="deny" msgid="2081879885755434506">"Keela"</string>
- <string name="permission_request_notification_title" msgid="5390555465778213840">"Luba taotletud"</string>
- <string name="permission_request_notification_with_subtitle" msgid="4325409589686688000">"Luba taotletud"\n"kontole <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="permission_request_notification_title" msgid="6486759795926237907">"Taotletud luba"</string>
+ <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"Luba on taotletud"\n"kontole <xliff:g id="ACCOUNT">%s</xliff:g>."</string>
<string name="input_method_binding_label" msgid="1283557179944992649">"Sisestusmeetod"</string>
<string name="sync_binding_label" msgid="3687969138375092423">"Sünkroonimine"</string>
<string name="accessibility_binding_label" msgid="4148120742096474641">"Juurdepääsetavus"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"Taustapilt"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"Muutke taustapilti"</string>
- <string name="vpn_title" msgid="8219003246858087489">"VPN on aktiveeritud."</string>
+ <string name="vpn_title" msgid="19615213552042827">"VPN on aktiveeritud"</string>
<string name="vpn_title_long" msgid="6400714798049252294">"VPN-i aktiveeris <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="vpn_text" msgid="1610714069627824309">"Koputage võrgu haldamiseks."</string>
- <string name="vpn_text_long" msgid="4907843483284977618">"Ühendatud seansiga <xliff:g id="SESSION">%s</xliff:g>. Koputage võrgu haldamiseks"</string>
+ <string name="vpn_text" msgid="3011306607126450322">"Võrgu haldamiseks puudutage."</string>
+ <string name="vpn_text_long" msgid="6407351006249174473">"Ühendatud seansiga <xliff:g id="SESSION">%s</xliff:g>. Võrgu haldamiseks puudutage."</string>
<string name="upload_file" msgid="2897957172366730416">"Valige fail"</string>
<string name="no_file_chosen" msgid="6363648562170759465">"Ühtegi faili pole valitud"</string>
<string name="reset" msgid="2448168080964209908">"Lähtesta"</string>
<string name="submit" msgid="1602335572089911941">"Saada"</string>
<string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Autorežiim lubatud"</string>
- <string name="car_mode_disable_notification_message" msgid="668663626721675614">"Valige autorežiimist väljumiseks."</string>
+ <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Autorežiimist väljumiseks puudutage."</string>
<string name="tethered_notification_title" msgid="3146694234398202601">"Jagamine või tööpunkt on aktiivne"</string>
- <string name="tethered_notification_message" msgid="3067108323903048927">"Puudutage seadistamiseks"</string>
+ <string name="tethered_notification_message" msgid="6857031760103062982">"Seadistamiseks puudutage."</string>
<string name="back_button_label" msgid="2300470004503343439">"Tagasi"</string>
<string name="next_button_label" msgid="1080555104677992408">"Järgmine"</string>
<string name="skip_button_label" msgid="1275362299471631819">"Jäta vahele"</string>
<string name="throttle_warning_notification_title" msgid="4890894267454867276">"Kõrge mobiilse andmeside kasutus"</string>
- <string name="throttle_warning_notification_message" msgid="2609734763845705708">"Puudutage, et saada lisateavet mobiilse andmeside kasutamise kohta"</string>
+ <string name="throttle_warning_notification_message" msgid="3340822228599337743">"Mobiilse andmeside kasutamise kohta lisateabe saamiseks puudutage."</string>
<string name="throttled_notification_title" msgid="6269541897729781332">"Mobiili andmemahupiirang ületatud"</string>
- <string name="throttled_notification_message" msgid="4712369856601275146">"Puudutage, et saada lisateavet mobiilse andmeside kasutamise kohta"</string>
+ <string name="throttled_notification_message" msgid="5443457321354907181">"Mobiilse andmeside kasutamise kohta lisateabe saamiseks puudutage."</string>
<string name="no_matches" msgid="8129421908915840737">"Vasted puuduvad"</string>
<string name="find_on_page" msgid="1946799233822820384">"Otsige lehelt"</string>
<plurals name="matches_found">
@@ -1099,10 +1115,10 @@
<item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g>/<xliff:g id="TOTAL">%d</xliff:g>"</item>
</plurals>
<string name="action_mode_done" msgid="7217581640461922289">"Valmis"</string>
- <string name="progress_unmounting" product="nosdcard" msgid="535863554318797377">"USB-mäluseadme lahutamine ..."</string>
- <string name="progress_unmounting" product="default" msgid="5556813978958789471">"SD-kaardi lahutamine ..."</string>
- <string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"USB-mäluseadme kustutamine ..."</string>
- <string name="progress_erasing" product="default" msgid="2115214724367534095">"SD-kaardi kustutamine ..."</string>
+ <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"USB-salvestusruumi eemaldamine ..."</string>
+ <string name="progress_unmounting" product="default" msgid="1327894998409537190">"SD-kaardi eemaldamine ..."</string>
+ <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"USB-salvestusruumi kustutamine ..."</string>
+ <string name="progress_erasing" product="default" msgid="6596988875507043042">"SD-kaardi kustutamine ..."</string>
<string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB-mäluseadme tühjendamine ebaõnnestus."</string>
<string name="format_error" product="default" msgid="7315248696644510935">"SD-kaardi kustutamine ebaõnnestus."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD-kaart eemaldati enne lahutamist."</string>
@@ -1121,17 +1137,17 @@
<string name="gpsVerifYes" msgid="2346566072867213563">"Jah"</string>
<string name="gpsVerifNo" msgid="1146564937346454865">"Ei"</string>
<string name="sync_too_many_deletes" msgid="5296321850662746890">"Kustutamiste piirarv on ületatud"</string>
- <string name="sync_too_many_deletes_desc" msgid="7030265992955132593">"Sünkroonimise tüübi <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g> konto <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> kohta on <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> kustutatud üksust. Mida te teha sooviksite?"</string>
- <string name="sync_really_delete" msgid="8933566316059338692">"Kustuta üksused."</string>
- <string name="sync_undo_deletes" msgid="8610996708225006328">"Kustutamiste tagasivõtmine"</string>
- <string name="sync_do_nothing" msgid="8717589462945226869">"Ära tee praegu midagi."</string>
+ <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"Kustutatavad üksused kontol <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> sünkroonimistüübi <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g> jaoks: <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g>. Mida soovite teha?"</string>
+ <string name="sync_really_delete" msgid="2572600103122596243">"Kustuta üksused"</string>
+ <string name="sync_undo_deletes" msgid="2941317360600338602">"Võtke kustutamised tagasi"</string>
+ <string name="sync_do_nothing" msgid="3743764740430821845">"Ära tee praegu midagi"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Konto valimine"</string>
<string name="add_account_label" msgid="2935267344849993553">"Konto lisamine"</string>
- <string name="choose_account_text" msgid="6891230675141555481">"Millist kontot sooviksite kasutada?"</string>
+ <string name="choose_account_text" msgid="6303348737197849675">"Millist kontot soovite kasutada?"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Lisa konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Suurenda"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Vähenda"</string>
- <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> – puudutage ja hoidke all."</string>
+ <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"<xliff:g id="VALUE">%s</xliff:g> puudutage ja hoidke."</string>
<string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Suurendamiseks lohistage üles, vähendamiseks alla."</string>
<string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Minutite arvu suurendamine"</string>
<string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"Minutite arvu vähendamine"</string>
@@ -1173,29 +1189,29 @@
<string name="description_target_silent" msgid="893551287746522182">"Hääletu"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Heli on sees"</string>
<string name="description_target_unlock_tablet" msgid="3833195335629795055">"Avamiseks tõmmake sõrmega."</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Ühendage peakomplekt, et kuulata paroole."</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Paroolide kuulamiseks ühendage peakomplekt."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkt."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Liigu avalehele"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Liigu üles"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Rohkem valikuid"</string>
- <string name="storage_internal" msgid="7556050805474115618">"Sisemälu"</string>
- <string name="storage_sd_card" msgid="8921771478629812343">"SD-kaart"</string>
+ <string name="storage_internal" msgid="4891916833657929263">"Sisemine salvestusruum"</string>
+ <string name="storage_sd_card" msgid="3282948861378286745">"SD-kaart"</string>
<string name="storage_usb" msgid="3017954059538517278">"USB-mäluseade"</string>
- <string name="extract_edit_menu_button" msgid="302060189057163906">"Muuda ..."</string>
+ <string name="extract_edit_menu_button" msgid="8940478730496610137">"Muuda"</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Andmete kasutamise hoiatus"</string>
- <string name="data_usage_warning_body" msgid="7217480745540055170">"Kas./sätete vaatamiseks puud.-ge"</string>
+ <string name="data_usage_warning_body" msgid="2814673551471969954">"Kasutuse/sätete vaat. puudutage."</string>
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G–3G-andmeside on keelatud"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-andmeside on keelatud"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobiilne andmeside on keelatud"</string>
<string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"WiFi-andmed on keelatud"</string>
- <string name="data_usage_limit_body" msgid="4313857592916426843">"Puudutage lubamiseks"</string>
+ <string name="data_usage_limit_body" msgid="3317964706973601386">"Lubamiseks puudutage."</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G andmemahupiirang ületatud"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G andmemahupiirang ületatud"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobiilne andmemahupiirang ületatud"</string>
<string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"WiFi-andmete piir on ületatud"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> üle kindlaksmääratud piirmäära"</string>
+ <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> üle määratud piirmäära."</string>
<string name="data_usage_restricted_title" msgid="5965157361036321914">"Taustandmed on piiratud"</string>
- <string name="data_usage_restricted_body" msgid="5087354814839059798">"Puudutage piirangu eemaldamiseks"</string>
+ <string name="data_usage_restricted_body" msgid="6741521330997452990">"Piirangu eemaldamiseks puudut."</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Turvasertifikaat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"See sertifikaat on kehtiv."</string>
<string name="issued_to" msgid="454239480274921032">"Väljastatud subjektile:"</string>
@@ -1212,7 +1228,10 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 sõrmejälg:"</string>
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Kuva kõik"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Tegevuse valimine"</string>
- <string name="share_action_provider_share_with" msgid="5247684435979149216">"Jagamine kasutajaga"</string>
+ <string name="share_action_provider_share_with" msgid="5247684435979149216">"Jagamine rakendusega:"</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Seade lukustatud."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
+ <string name="sending" msgid="3245653681008218030">"Saatmine ..."</string>
+ <string name="launchBrowserDefault" msgid="2057951947297614725">"Kas käivitada brauser?"</string>
+ <string name="SetupCallDefault" msgid="5834948469253758575">"Kas vastata kõnele?"</string>
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index e2448f9..7097e43 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"تأیید"</string>
<string name="report" msgid="4060218260984795706">"گزارش"</string>
<string name="wait" msgid="7147118217226317732">"منتظر بمانید"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"این صفحه پاسخ نمیدهد."\n\n"آیا میخواهید آن را ببندید؟"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"برنامه مجدداً هدایت شد"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> اکنون در حال اجرا است."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> از ابتدا راه اندازی شد."</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 27a9bf4..0a60adb 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Ilmoita"</string>
<string name="wait" msgid="7147118217226317732">"Odota"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Sivu ei vastaa."\n\n"Haluatko sulkea sen?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Sovelluksen uud.ohjaus"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> on nyt käynnissä."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> käynnistettiin alun perin."</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index c647570..d32f487 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Rapport"</string>
<string name="wait" msgid="7147118217226317732">"Attendre"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"La page ne répond pas."\n" "\n"Voulez-vous la fermer ?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Application redirigée"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> est maintenant lancée."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Application lancée initialement : <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 3e440ca..7a4f706 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"ठीक"</string>
<string name="report" msgid="4060218260984795706">"रिपोर्ट करें"</string>
<string name="wait" msgid="7147118217226317732">"प्रतीक्षा करें"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"पृष्ठ प्रतिसाद नहीं दे रहा है."\n\n"क्या आप इसे बंद करना चाहते हैं?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"एप्लि. रीडायरेक्ट किया गया"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> अभी चल रहा है."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> को वास्तविक रूप से लॉन्च किया गया था."</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 460ec88..e37be22 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"U redu"</string>
<string name="report" msgid="4060218260984795706">"Izvješće"</string>
<string name="wait" msgid="7147118217226317732">"Pričekaj"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Stranica ne reagira."\n\n"Želite li ju zatvoriti?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Aplikacija preusmjerena"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> se izvodi sada."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> pokrenuta je prva."</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 9278bde..9b3eb54 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Jelentés"</string>
<string name="wait" msgid="7147118217226317732">"Várakozás"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Az oldal nem válaszol."\n\n"Szeretné bezárni?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Alkalmazás átirányítva"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> éppen fut."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> volt eredetileg elindítva."</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 30fb875..b61fb42 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Laporkan"</string>
<string name="wait" msgid="7147118217226317732">"Tunggu"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Laman ini tidak menanggapi."\n\n"Apakah Anda ingin menutupnya?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Apl dialihkan"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang berjalan."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> telah diluncurkan aslinya."</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 2cc182f..ebf7223 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Segnala"</string>
<string name="wait" msgid="7147118217226317732">"Attendi"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"La pagina non risponde più."\n\n"Vuoi chiuderla?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Applicazione reindirizzata"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> è ora in esecuzione."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> già avviata."</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index e9dd004..69d506e 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"אישור"</string>
<string name="report" msgid="4060218260984795706">"שלח דוח"</string>
<string name="wait" msgid="7147118217226317732">"המתן"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"הדף אינו מגיב."\n\n"האם אתה רוצה לסגור אותו?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"הפנייה מחדש של יישום"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> פועל כעת."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> הופעל במקור."</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 234f64c..cb958e4 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"レポート"</string>
<string name="wait" msgid="7147118217226317732">"待機"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"ページが応答しません。"\n\n"ページを閉じますか?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"アプリのリダイレクト"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g>が実行中です。"</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g>が最初に起動していました。"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 804110c..216ac76 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"확인"</string>
<string name="report" msgid="4060218260984795706">"신고"</string>
<string name="wait" msgid="7147118217226317732">"대기"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"페이지가 응답하지 않습니다."\n\n"페이지를 닫으시겠습니까?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"앱 리디렉션됨"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g>이(가) 실행 중입니다."</string>
<string name="launch_warning_original" msgid="188102023021668683">"원래 <xliff:g id="APP_NAME">%1$s</xliff:g>을(를) 실행했습니다."</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 9d6bd77..7f0370f 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"Gerai"</string>
<string name="report" msgid="4060218260984795706">"Ataskaita"</string>
<string name="wait" msgid="7147118217226317732">"Palaukti"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Puslapis neatsako."\n\n"Ar norite jį uždaryti?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Programa peradresuota"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ dabar vykdoma."</string>
<string name="launch_warning_original" msgid="188102023021668683">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ buvo iš pradžių paleista."</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 195059c..a052481 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"Labi"</string>
<string name="report" msgid="4060218260984795706">"Pārskats"</string>
<string name="wait" msgid="7147118217226317732">"Gaidīt"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"No lapas netiek saņemta atbilde."\n\n"Vai vēlaties to aizvērt?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Lietotne ir novirzīta"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> tagad darbojas."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Sākotnēji tika palaista lietojumprogramma <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index a8e733f..f6189f2 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Laporkan"</string>
<string name="wait" msgid="7147118217226317732">"Tunggu"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Laman ini tidak bertindak balas. "\n\n"Adakah anda mahu menutupnya?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Apl diubah hala"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> kini sedang berjalan."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> pada asalnya telah dilancarkan."</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 7e3fb86..e03b735 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Rapportér"</string>
<string name="wait" msgid="7147118217226317732">"Vent"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Siden svarer ikke."\n\n"Vil du lukke den?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Appen er viderekoblet"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> kjører nå."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> ble opprinnelig startet."</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index b956433..3a43b8e 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Rapport"</string>
<string name="wait" msgid="7147118217226317732">"Wachten"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"De pagina reageert niet meer."\n\n"Wilt u de pagina sluiten?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"App verplaatst"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> is nu actief."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> was het eerst gestart."</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 9c713aa..e73f7d6 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -908,13 +908,14 @@
<string name="aerr_application" msgid="932628488013092776">"Niestety, aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> została zatrzymana."</string>
<string name="aerr_process" msgid="4507058997035697579">"Niestety, proces <xliff:g id="PROCESS">%1$s</xliff:g> został zatrzymany."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
- <string name="anr_activity_application" msgid="1904477189057199066">"Aplikacja <xliff:g id="APPLICATION">%2$s</xliff:g> nie odpowiada."\n\n"Czy chcesz ją zamknąć?"</string>
+ <string name="anr_activity_application" msgid="1904477189057199066">"Aplikacja <xliff:g id="APPLICATION">%2$s</xliff:g> nie reaguje."\n\n"Czy chcesz ją zamknąć?"</string>
<string name="anr_activity_process" msgid="5776209883299089767">"Działanie <xliff:g id="ACTIVITY">%1$s</xliff:g> nie odpowiada."\n\n"Czy chcesz je zakończyć?"</string>
- <string name="anr_application_process" msgid="8941757607340481057">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> nie odpowiada. Czy chcesz ją zamknąć?"</string>
+ <string name="anr_application_process" msgid="8941757607340481057">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> nie reaguje. Czy chcesz ją zamknąć?"</string>
<string name="anr_process" msgid="6513209874880517125">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> nie odpowiada."\n\n"Czy chcesz go zakończyć?"</string>
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Zgłoś"</string>
<string name="wait" msgid="7147118217226317732">"Czekaj"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Strona nie odpowiada na żądania."\n\n"Zamknąć ją?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Aplikacja przekierowana"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> jest uruchomiona."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> została pierwotnie uruchomiona."</string>
@@ -1214,12 +1215,12 @@
<string name="ssl_certificate" msgid="6510040486049237639">"Certyfikat zabezpieczeń"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certyfikat jest ważny."</string>
<string name="issued_to" msgid="454239480274921032">"Wystawiony dla:"</string>
- <string name="common_name" msgid="2233209299434172646">"Nazwa pospolita (CN):"</string>
+ <string name="common_name" msgid="2233209299434172646">"Nazwa (CN):"</string>
<string name="org_name" msgid="6973561190762085236">"Organizacja:"</string>
<string name="org_unit" msgid="7265981890422070383">"Jednostka organizacyjna:"</string>
<string name="issued_by" msgid="2647584988057481566">"Wystawca:"</string>
<string name="validity_period" msgid="8818886137545983110">"Ważność:"</string>
- <string name="issued_on" msgid="5895017404361397232">"Data wystawienia:"</string>
+ <string name="issued_on" msgid="5895017404361397232">"Wystawiony:"</string>
<string name="expires_on" msgid="3676242949915959821">"Wygasa:"</string>
<string name="serial_number" msgid="758814067660862493">"Numer seryjny:"</string>
<string name="fingerprints" msgid="4516019619850763049">"Odciski cyfrowe:"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index c5e470c..800013d 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Relatório"</string>
<string name="wait" msgid="7147118217226317732">"Esperar"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"A página deixou de responder. "\n" "\n" Pretende fechá-la?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Aplicação redirecionada"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> está agora a ser executado."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> foi originalmente iniciado."</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 10ac03f..c907929 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Informar"</string>
<string name="wait" msgid="7147118217226317732">"Aguardar"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"A página não responde."\n\n"Deseja fechá-la?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Aplicativo redirecionado"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> não está em execução."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> foi iniciado."</string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 4d40ddc..bc8d4fb 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -27,7 +27,8 @@
<string name="terabyteShort" msgid="231613018159186962">"TB"</string>
<string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
- <!-- outdated translation 6071602020171759109 --> <string name="untitled" msgid="4638956954852782576">"<senza titel>"</string>
+ <!-- no translation found for untitled (4638956954852782576) -->
+ <skip />
<string name="ellipsis" msgid="7899829516048813237">"…"</string>
<!-- no translation found for ellipsis_two_dots (1228078994866030736) -->
<skip />
@@ -44,9 +45,12 @@
<string name="serviceErased" msgid="1288584695297200972">"Stizzà cun success."</string>
<string name="passwordIncorrect" msgid="7612208839450128715">"Il pled-clav è nuncorrect."</string>
<string name="mmiComplete" msgid="8232527495411698359">"MMI terminà."</string>
- <!-- outdated translation 5085454289896032547 --> <string name="badPin" msgid="9015277645546710014">"Il code PIN vegl che Vus avais endatà è nuncorrect."</string>
- <!-- outdated translation 5702522162746042460 --> <string name="badPuk" msgid="5487257647081132201">"Il PUK che Vus avais tippà è nuncorrect."</string>
- <!-- outdated translation 3695902225843339274 --> <string name="mismatchPin" msgid="609379054496863419">"Ils codes PIN che Vus avais endatà n\'èn betg identics."</string>
+ <!-- no translation found for badPin (9015277645546710014) -->
+ <skip />
+ <!-- no translation found for badPuk (5487257647081132201) -->
+ <skip />
+ <!-- no translation found for mismatchPin (609379054496863419) -->
+ <skip />
<string name="invalidPin" msgid="3850018445187475377">"Endatai in code PIN che cuntegna 4 fin 8 cifras."</string>
<!-- no translation found for invalidPuk (8761456210898036513) -->
<skip />
@@ -70,16 +74,20 @@
<string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"La ID dal telefonader n\'è betg limitada tenor configuraziun predefinida. Proxim clom: limitada."</string>
<string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"La ID dal telefonader n\'è betg limitada tenor configuraziun predefinida. Proxim clom: betg limitada."</string>
<string name="serviceNotProvisioned" msgid="8614830180508686666">"Quest servetsch na vegn betg sustegnì."</string>
- <!-- outdated translation 5460892159398802465 --> <string name="CLIRPermanent" msgid="3377371145926835671">"Il parameter per la ID dal telefonader na po betg vegnir modifitgà."</string>
+ <!-- no translation found for CLIRPermanent (3377371145926835671) -->
+ <skip />
<string name="RestrictedChangedTitle" msgid="5592189398956187498">"L\'access limità è vegnì modifitgà."</string>
<string name="RestrictedOnData" msgid="8653794784690065540">"Il servetsch da datas è bloccà."</string>
<string name="RestrictedOnEmergency" msgid="6581163779072833665">"Il servetsch da cloms d\'urgenza è bloccà."</string>
<string name="RestrictedOnNormal" msgid="4953867011389750673">"Il servetsch vocal è bloccà."</string>
- <string name="RestrictedOnAllVoice" msgid="1459318899842232234">"Tut ils servetschs vocals èn bloccads."</string>
+ <!-- no translation found for RestrictedOnAllVoice (3396963652108151260) -->
+ <skip />
<string name="RestrictedOnSms" msgid="8314352327461638897">"Il servetsch SMS è bloccà."</string>
- <string name="RestrictedOnVoiceData" msgid="8244438624660371717">"Ils servetschs vocals/da datas èn bloccads."</string>
+ <!-- no translation found for RestrictedOnVoiceData (996636487106171320) -->
+ <skip />
<string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Ils servetschs vocals/dad SMS èn bloccads."</string>
- <string name="RestrictedOnAll" msgid="2714924667937117304">"Tut ils servetschs vocals/da datas/da SMS èn bloccads."</string>
+ <!-- no translation found for RestrictedOnAll (5643028264466092821) -->
+ <skip />
<string name="serviceClassVoice" msgid="1258393812335258019">"Vusch"</string>
<string name="serviceClassData" msgid="872456782077937893">"Datas"</string>
<string name="serviceClassFAX" msgid="5566624998840486475">"FAX"</string>
@@ -110,35 +118,56 @@
<string name="fcComplete" msgid="3118848230966886575">"Code da servetsch terminà"</string>
<string name="fcError" msgid="3327560126588500777">"Problem da connexiun u code da funcziun nunvalid"</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"La pagina d\'internet cuntegna ina errur."</string>
- <string name="httpErrorLookup" msgid="4517085806977851374">"Impussibel da chattar la URL."</string>
- <!-- outdated translation 2781440683514730227 --> <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"Il schema d\'autentificaziun da la site na vegn betg sustegnì."</string>
- <string name="httpErrorAuth" msgid="7293960746955020542">"L\'autentificaziun n\'è betg reussida."</string>
+ <!-- no translation found for httpError (7956392511146698522) -->
+ <skip />
+ <!-- no translation found for httpErrorLookup (4711687456111963163) -->
+ <skip />
+ <!-- no translation found for httpErrorUnsupportedAuthScheme (6299980280442076799) -->
+ <skip />
+ <!-- no translation found for httpErrorAuth (1435065629438044534) -->
+ <skip />
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"L\'autentificaziun cun agid dad in proxy server n\'è betg reussida."</string>
- <string name="httpErrorConnect" msgid="7623096283505770433">"Betg reussì da connectar cun il server."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"La communicaziun cun il server n\'è betg reussida. Empruvai pli tard anc ina giada."</string>
+ <!-- no translation found for httpErrorConnect (8714273236364640549) -->
+ <skip />
+ <!-- no translation found for httpErrorIO (2340558197489302188) -->
+ <skip />
<string name="httpErrorTimeout" msgid="4743403703762883954">"Surpassà il temp cun connectar al server."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Questa pagina cuntegna memia blers renviaments da server."</string>
- <!-- outdated translation 5257172771607996054 --> <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"Quest protocol na vegn betg sustegnì."</string>
- <string name="httpErrorFailedSslHandshake" msgid="3088290300440289771">"Impussibel da stabilir ina connexiun segira."</string>
- <string name="httpErrorBadUrl" msgid="6088183159988619736">"Impussibel dad avrir la pagina. La URL è nunvalida."</string>
- <string name="httpErrorFile" msgid="8250549644091165175">"Impussibel d\'acceder a la datoteca."</string>
- <string name="httpErrorFileNotFound" msgid="5588380756326017105">"La datoteca dumandada n\'è betg vegnida chattada."</string>
+ <!-- no translation found for httpErrorUnsupportedScheme (5015730812906192208) -->
+ <skip />
+ <!-- no translation found for httpErrorFailedSslHandshake (96549606000658641) -->
+ <skip />
+ <!-- no translation found for httpErrorBadUrl (3636929722728881972) -->
+ <skip />
+ <!-- no translation found for httpErrorFile (2170788515052558676) -->
+ <skip />
+ <!-- no translation found for httpErrorFileNotFound (6203856612042655084) -->
+ <skip />
<string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Actualmain vegnan memia bleras dumondas elavuradas. Empruvai pli tard anc ina giada."</string>
- <string name="notification_title" msgid="1259940370369187045">"Errur cun connectar al conto <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
+ <!-- no translation found for notification_title (8967710025036163822) -->
+ <skip />
<string name="contentServiceSync" msgid="8353523060269335667">"Sincronisar"</string>
<string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sincronisar"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Memia blers cuntegns stizzads (<xliff:g id="CONTENT_TYPE">%s</xliff:g>)."</string>
- <!-- outdated translation 6632412458436461203 --> <string name="low_memory" product="tablet" msgid="2292820184396262278">"La memoria dal telefon è occupada! Stizzai datotecas per crear capacitad da memorisar."</string>
- <string name="low_memory" product="default" msgid="6632412458436461203">"La memoria dal telefon è occupada! Stizzai datotecas per crear capacitad da memorisar."</string>
+ <!-- no translation found for low_memory (6494019234102154896) -->
+ <skip />
+ <!-- no translation found for low_memory (3475999286680000541) -->
+ <skip />
<string name="me" msgid="6545696007631404292">"Jau"</string>
- <!-- outdated translation 1319919075463988638 --> <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Opziuns dal telefon"</string>
+ <!-- no translation found for power_dialog (8545351420865202853) -->
+ <skip />
<string name="power_dialog" product="default" msgid="1319919075463988638">"Opziuns dal telefon"</string>
<string name="silent_mode" msgid="7167703389802618663">"Modus silenzius"</string>
<string name="turn_on_radio" msgid="3912793092339962371">"Activar il modus senza fil"</string>
<string name="turn_off_radio" msgid="8198784949987062346">"Deactivar il modus senza fil"</string>
<string name="screen_lock" msgid="799094655496098153">"Bloccaziun dal visur"</string>
<string name="power_off" msgid="4266614107412865048">"Serrar"</string>
+ <!-- no translation found for silent_mode_silent (319298163018473078) -->
+ <skip />
+ <!-- no translation found for silent_mode_vibrate (7072043388581551395) -->
+ <skip />
+ <!-- no translation found for silent_mode_ring (8592241816194074353) -->
+ <skip />
<string name="shutdown_progress" msgid="2281079257329981203">"Vegn serrà..."</string>
<!-- no translation found for shutdown_confirm (3385745179555731470) -->
<skip />
@@ -147,8 +176,10 @@
<!-- no translation found for shutdown_confirm_question (2906544768881136183) -->
<skip />
<string name="recent_tasks_title" msgid="3691764623638127888">"Utilisà sco ultim"</string>
- <!-- outdated translation 279702952298056674 --> <string name="no_recent_tasks" msgid="8794906658732193473">"Naginas applicaziuns utilisadas dacurt"</string>
- <!-- outdated translation 2406416831541615258 --> <string name="global_actions" product="tablet" msgid="408477140088053665">"Opziuns dal telefon"</string>
+ <!-- no translation found for no_recent_tasks (8794906658732193473) -->
+ <skip />
+ <!-- no translation found for global_actions (408477140088053665) -->
+ <skip />
<string name="global_actions" product="default" msgid="2406416831541615258">"Opziuns dal telefon"</string>
<string name="global_action_lock" msgid="2844945191792119712">"Bloccaziun dal visur"</string>
<string name="global_action_power_off" msgid="4471879440839879722">"Metter ord funcziun"</string>
@@ -163,16 +194,21 @@
<string name="safeMode" msgid="2788228061547930246">"Modus segirà"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string>
<string name="permgrouplab_costMoney" msgid="5429808217861460401">"Servetschs che custan"</string>
- <!-- outdated translation 8193824940620517189 --> <string name="permgroupdesc_costMoney" msgid="8596717365335027057">"Permetta ad applicaziuns dad exequir acziuns che custan eventualmain."</string>
+ <!-- no translation found for permgroupdesc_costMoney (3293301903409869495) -->
+ <skip />
<string name="permgrouplab_messages" msgid="7521249148445456662">"Voss messadis"</string>
- <!-- outdated translation 7045736972019211994 --> <string name="permgroupdesc_messages" msgid="7821999071003699236">"\"Leger e scriver Voss SMS, e-mails ed auters messadis.\""</string>
+ <!-- no translation found for permgroupdesc_messages (7821999071003699236) -->
+ <skip />
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vossas infurmaziuns persunalas"</string>
- <!-- outdated translation 5488050357388806068 --> <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acceder directamain als contacts ed al chalender memorisà sin il telefonin."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (6975389054186265786) -->
+ <skip />
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acceder directamain als contacts ed al chalender memorisà sin il telefonin."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vossa posiziun"</string>
- <string name="permgroupdesc_location" msgid="2430258821648348660">"suandar Vossa posiziun geografica"</string>
+ <!-- no translation found for permgroupdesc_location (5704679763124170100) -->
+ <skip />
<string name="permgrouplab_network" msgid="5808983377727109831">"Communicaziun rait"</string>
- <!-- outdated translation 5035763698958415998 --> <string name="permgroupdesc_network" msgid="4917593670797570584">"Permetta ad applicaziuns l\'access a differentas funcziuns da la rait."</string>
+ <!-- no translation found for permgroupdesc_network (4478299413241861987) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Voss contos"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Access als contos disponibels"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Cumonds da la hardware"</string>
@@ -182,62 +218,90 @@
<string name="permgrouplab_systemTools" msgid="4652191644082714048">"Utensils da sistem"</string>
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Access e controlla sin nivel datiers al sistem."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utensils per sviluppaders"</string>
- <!-- outdated translation 9056431193893809814 --> <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Questas funcziunalitads èn mo previsas per ils sviluppaders dad applicaziuns."</string>
+ <!-- no translation found for permgroupdesc_developmentTools (7058828032358142018) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Memoria"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Access a la carta SD."</string>
+ <!-- no translation found for permgroupdesc_storage (7442318502446874999) -->
+ <skip />
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Access a la carta SD."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"deactivar u modifitgar la trav da status"</string>
- <!-- outdated translation 1365473595331989732 --> <string name="permdesc_statusBar" msgid="8434669549504290975">"Permetta a l\'applicaziun da deactivar l\'indicatur da status u agiuntar ed allontanar simbols dal sistem."</string>
+ <!-- no translation found for permdesc_statusBar (8434669549504290975) -->
+ <skip />
<string name="permlab_statusBarService" msgid="7247281911387931485">"trav da status"</string>
- <!-- outdated translation 4097605867643520920 --> <string name="permdesc_statusBarService" msgid="716113660795976060">"Permetta a l\'applicaziun dad esser la trav da status."</string>
+ <!-- no translation found for permdesc_statusBarService (716113660795976060) -->
+ <skip />
<string name="permlab_expandStatusBar" msgid="1148198785937489264">"expander/reducir la trav da status"</string>
- <!-- outdated translation 7088604400110768665 --> <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Permetta a l\'applicaziun da mussar u zuppentar la trav da status."</string>
+ <!-- no translation found for permdesc_expandStatusBar (6917549437129401132) -->
+ <skip />
<string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"interceptar cloms sortints"</string>
- <!-- outdated translation 2228988201852654461 --> <string name="permdesc_processOutgoingCalls" msgid="1152111671618301044">"\"Permetta ad ina applicaziun dad elavurar ils cloms sortints e da modifitgar il numer che duai vegnir cumponì. Applicaziuns donnegiusas pon uschia eventualmain survegliar, renviar u evitar cloms sortints.\""</string>
+ <!-- no translation found for permdesc_processOutgoingCalls (1152111671618301044) -->
+ <skip />
<string name="permlab_receiveSms" msgid="2697628268086208535">"retschaiver SMS"</string>
- <!-- outdated translation 6298292335965966117 --> <string name="permdesc_receiveSms" msgid="8107887121893611793">"Permetta a l\'applicaziun da retschaiver ed elavurar SMS. Applicaziuns donnegiusas pon uschia survegliar Voss messadis u als stizzar avant ch\'els vegnan mussads."</string>
+ <!-- no translation found for permdesc_receiveSms (8107887121893611793) -->
+ <skip />
<string name="permlab_receiveMms" msgid="8894700916188083287">"retschaiver MMS"</string>
- <!-- outdated translation 4563346832000174373 --> <string name="permdesc_receiveMms" msgid="1424805308566612086">"Permetta a l\'applicaziun da retschaiver ed elavurar MMS. Applicaziuns donnegiusas pon uschia survegliar Voss messadis u als stizzar avant ch\'els vegnan mussads."</string>
+ <!-- no translation found for permdesc_receiveMms (1424805308566612086) -->
+ <skip />
<!-- no translation found for permlab_receiveEmergencyBroadcast (1803477660846288089) -->
<skip />
<!-- no translation found for permdesc_receiveEmergencyBroadcast (848524070262431974) -->
<skip />
<string name="permlab_sendSms" msgid="5600830612147671529">"trametter messadis SMS"</string>
- <!-- outdated translation 1946540351763502120 --> <string name="permdesc_sendSms" msgid="906546667507626156">"Permetta ad applicaziuns da trametter messadis SMS. Applicaziuns donnegiusas pon chaschunar custs cun trametter messadis senza As dumandar."</string>
+ <!-- no translation found for permdesc_sendSms (906546667507626156) -->
+ <skip />
<!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
<skip />
<!-- no translation found for permdesc_sendSmsNoConfirmation (3437759207020400204) -->
<skip />
<string name="permlab_readSms" msgid="4085333708122372256">"leger SMS u MMS"</string>
- <!-- outdated translation 3002170087197294591 --> <string name="permdesc_readSms" product="tablet" msgid="2341692916884515613">"Permetta ad ina applicaziun da leger ils SMS memorisads sin Voss telefonin u sin Vossa carta SIM. Applicaziuns donnegiusas legian uschia eventualmain Voss messadis confidenzials."</string>
- <!-- outdated translation 3002170087197294591 --> <string name="permdesc_readSms" product="default" msgid="5653850482025875493">"Permetta ad ina applicaziun da leger ils SMS memorisads sin Voss telefonin u sin Vossa carta SIM. Applicaziuns donnegiusas legian uschia eventualmain Voss messadis confidenzials."</string>
+ <!-- no translation found for permdesc_readSms (2341692916884515613) -->
+ <skip />
+ <!-- no translation found for permdesc_readSms (5653850482025875493) -->
+ <skip />
<string name="permlab_writeSms" msgid="6881122575154940744">"modifitgar SMS u MMS"</string>
- <!-- outdated translation 6299398896177548095 --> <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Permetta ad ina applicaziun da modifitgar SMS memorisads sin Voss telefonin u Vossa carta SIM. Applicaziuns donnegiusas stizzan uschia eventualmain Voss messadis."</string>
- <!-- outdated translation 6299398896177548095 --> <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Permetta ad ina applicaziun da modifitgar SMS memorisads sin Voss telefonin u Vossa carta SIM. Applicaziuns donnegiusas stizzan uschia eventualmain Voss messadis."</string>
+ <!-- no translation found for permdesc_writeSms (5160413947794501538) -->
+ <skip />
+ <!-- no translation found for permdesc_writeSms (7268668709052328567) -->
+ <skip />
<string name="permlab_receiveWapPush" msgid="8258226427716551388">"retschaiver messadis WAP"</string>
- <!-- outdated translation 5979623826128082171 --> <string name="permdesc_receiveWapPush" msgid="7983455145335316872">"Permetta a l\'applicaziun da retschaiver ed elavurar messadis WAP. Applicaziuns donnegiusas pon uschia survegliar Voss messadis u als stizzar avant ch\'els vegnan mussads."</string>
- <!-- outdated translation 5005277531132573353 --> <string name="permlab_getTasks" msgid="6466095396623933906">"recuperaziun da las applicaziuns exequidas"</string>
- <!-- outdated translation 7048711358713443341 --> <string name="permdesc_getTasks" msgid="6608159250520381359">"Permetta a l\'applicaziun da recuperar infurmaziuns davart incumbensas che vegnan exequidas u èn gist vegnidas exequidas. Applicaziuns donnegiusas pon uschia obtegnair infurmaziuns privatas concernent autras applicaziuns."</string>
- <!-- outdated translation 5669588525059921549 --> <string name="permlab_reorderTasks" msgid="2018575526934422779">"reorganisar las applicaziuns che vegnan exequidas"</string>
- <!-- outdated translation 126252774270522835 --> <string name="permdesc_reorderTasks" msgid="4175137612205663399">"Permetta ad ina applicaziun da spustar las incumbensas en il fund davant u en il fund davos. Applicaziuns donnegiusas pon sa mussar en il fund davant senza Vossa autorisaziun."</string>
+ <!-- no translation found for permdesc_receiveWapPush (7983455145335316872) -->
+ <skip />
+ <!-- no translation found for permlab_getTasks (6466095396623933906) -->
+ <skip />
+ <!-- no translation found for permdesc_getTasks (6608159250520381359) -->
+ <skip />
+ <!-- no translation found for permlab_reorderTasks (2018575526934422779) -->
+ <skip />
+ <!-- no translation found for permdesc_reorderTasks (4175137612205663399) -->
+ <skip />
<!-- no translation found for permlab_removeTasks (6821513401870377403) -->
<skip />
- <!-- no translation found for permdesc_removeTasks (1000226123143185094) -->
+ <!-- no translation found for permdesc_removeTasks (1394714352062635493) -->
<skip />
- <!-- outdated translation 4339730312925176742 --> <string name="permlab_setDebugApp" msgid="3022107198686584052">"activar il debugging da l\'applicaziun"</string>
- <!-- outdated translation 5584310661711990702 --> <string name="permdesc_setDebugApp" msgid="6215654419903651172">"Permetta ad ina applicaziun dad activar il debugging per autras applicaziuns. Applicaziuns donnegiusas pon uschia serrar autras applicaziuns."</string>
+ <!-- no translation found for permlab_setDebugApp (3022107198686584052) -->
+ <skip />
+ <!-- no translation found for permdesc_setDebugApp (4474512416299013256) -->
+ <skip />
<string name="permlab_changeConfiguration" msgid="8214475779521218295">"modifitgar ils parameters da la UI"</string>
- <!-- outdated translation 3465121501528064399 --> <string name="permdesc_changeConfiguration" msgid="4104052649900380324">"Permetta ad ina applicaziun da modifitgar la configuraziun actuala (per exempel la grondezza da la scrittira ed ils parameters regiunals)."</string>
+ <!-- no translation found for permdesc_changeConfiguration (4372223873154296076) -->
+ <skip />
<string name="permlab_enableCarMode" msgid="5684504058192921098">"activar il modus dad auto"</string>
- <!-- outdated translation 5673461159384850628 --> <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Permetta ad ina applicaziun dad activar il modus dad auto."</string>
+ <!-- no translation found for permdesc_enableCarMode (4853187425751419467) -->
+ <skip />
<string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"interrumper ils process en il fund davos"</string>
- <!-- outdated translation 2908829602869383753 --> <string name="permdesc_killBackgroundProcesses" msgid="931129103262126617">"Permetta ad ina applicaziun da serrar process en il fund davos dad autras applicaziuns era en cas da memoria suffizienta."</string>
- <!-- outdated translation 1447830113260156236 --> <string name="permlab_forceStopPackages" msgid="2329627428832067700">"serrar autras applicaziuns cun forza"</string>
- <!-- outdated translation 7263036616161367402 --> <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"Permetta ad ina applicaziun da sfurzar autras applicaziuns da serrar."</string>
- <!-- outdated translation 1804196839880393631 --> <string name="permlab_forceBack" msgid="652935204072584616">"serrar l\'applicaziun cun forza"</string>
- <!-- outdated translation 6534109744159919013 --> <string name="permdesc_forceBack" msgid="3892295830419513623">"Permetta ad ina applicaziun da serrar tut las activitads che vegnan exequidas en il fund davant e da las spustar en il fund davos. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_killBackgroundProcesses (931129103262126617) -->
+ <skip />
+ <!-- no translation found for permlab_forceStopPackages (2329627428832067700) -->
+ <skip />
+ <!-- no translation found for permdesc_forceStopPackages (5253157296183940812) -->
+ <skip />
+ <!-- no translation found for permlab_forceBack (652935204072584616) -->
+ <skip />
+ <!-- no translation found for permdesc_forceBack (3892295830419513623) -->
+ <skip />
<string name="permlab_dump" msgid="1681799862438954752">"verifitgar il status intern dal sistem"</string>
- <!-- outdated translation 2198776174276275220 --> <string name="permdesc_dump" msgid="1778299088692290329">"\"Permetta ad ina applicaziun da vesair il status intern dal sistem. Applicaziuns donnegiusas pon uschia obtegnair numerusas infurmaziuns privatas u segiradas, a las qualas ellas na dastgassan normalmain mai acceder.\""</string>
+ <!-- no translation found for permdesc_dump (1778299088692290329) -->
+ <skip />
<!-- no translation found for permlab_retrieve_window_content (8022588608994589938) -->
<skip />
<!-- no translation found for permdesc_retrieve_window_content (3193269069469700265) -->
@@ -245,42 +309,62 @@
<string name="permlab_shutdown" msgid="7185747824038909016">"serrar parzialmain"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Metta l\'administratur dad activitads en in stadi da pausa. El na vegn betg serrà dal tut."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"evitar il midar tranter applicaziuns"</string>
- <!-- outdated translation 3857886086919033794 --> <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Impedescha che l\'utilisader midia ad ina autra applicaziun."</string>
- <!-- outdated translation 7811586187574696296 --> <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"survegliar e controllar l\'aviar dad applicaziuns"</string>
- <!-- outdated translation 3228701938345388092 --> <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Permetta ad ina applicaziun da survegliar e controllar l\'aviar dad activitads dal sistem. Applicaziuns donnegiusas pon uschia periclitar l\'entir sistem. Questa permissiun è mo previsa per process da svilup e mai per il diever normal dal telefonin."</string>
+ <!-- no translation found for permdesc_stopAppSwitches (8262195802582255021) -->
+ <skip />
+ <!-- no translation found for permlab_runSetActivityWatcher (892239094867182656) -->
+ <skip />
+ <!-- no translation found for permdesc_runSetActivityWatcher (6003603162578577406) -->
+ <skip />
<string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"trametter in broadcast senza pachet"</string>
- <!-- outdated translation 3453286591439891260 --> <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Permetta ad ina applicaziun da trametter in avis cura ch\'in pachet d\'applicaziun è vegnì stizzà. Applicaziuns donnegiusas pon utilisar questa funcziunalitad per interrumper l\'execuziun dad autras applicaziuns."</string>
+ <!-- no translation found for permdesc_broadcastPackageRemoved (6621901216207931089) -->
+ <skip />
<string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"trametter in broadcast retschavì per SMS"</string>
- <!-- outdated translation 9122419277306740155 --> <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Permetta ad ina applicaziun da trametter in avis cura ch\'in messadi vegn retschavì. Applicaziuns donnegiusas pon utilisar questa funcziunalitad per dar da crair ch\'in messadi saja arrivà."</string>
+ <!-- no translation found for permdesc_broadcastSmsReceived (4152037720034365492) -->
+ <skip />
<string name="permlab_broadcastWapPush" msgid="3145347413028582371">"trametter in broadcast retschavì da WAP-PUSH"</string>
- <!-- outdated translation 3955303669461378091 --> <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Permetta ad ina applicaziun da trametter in avis cura ch\'in messadi WAP PUSH vegn retschavì. Applicaziuns donnegiusas pon utilisar questa funcziunalitad per dar da crair ch\'in MMS saja arrivà u per remplazzar il cuntegn da mintga pagina d\'internet cun datas donnegiusas."</string>
+ <!-- no translation found for permdesc_broadcastWapPush (4783402525039442729) -->
+ <skip />
<string name="permlab_setProcessLimit" msgid="2451873664363662666">"limitar il dumber maximal da process exequids"</string>
- <!-- outdated translation 7824786028557379539 --> <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Permetta ad ina applicaziun da controllar il dumber maximal da process che pon vegnir exequids a medem temp. Betg previs per applicaziuns normalas."</string>
- <!-- outdated translation 5342837862439543783 --> <string name="permlab_setAlwaysFinish" msgid="238828158465736054">"serrar tut las applicaziuns en il fund davos"</string>
- <!-- outdated translation 8773936403987091620 --> <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Permetta ad ina applicaziun da controllar schebain activitads vegnan adina terminadas sch\'ellas vegnan stuschadas en il fund davos. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_setProcessLimit (7318061314040879542) -->
+ <skip />
+ <!-- no translation found for permlab_setAlwaysFinish (238828158465736054) -->
+ <skip />
+ <!-- no translation found for permdesc_setAlwaysFinish (7471310652868841499) -->
+ <skip />
<string name="permlab_batteryStats" msgid="7863923071360031652">"modifitgar las datas da l\'accu"</string>
- <!-- outdated translation 5847319823772230560 --> <string name="permdesc_batteryStats" msgid="6835186932305744068">"Permetta da modifitgar las datas statisticas da l\'accu. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_batteryStats (6835186932305744068) -->
+ <skip />
<string name="permlab_backup" msgid="470013022865453920">"controllar las copias da segirezza e la restauraziun dal sistem"</string>
- <!-- outdated translation 4837493065154256525 --> <string name="permdesc_backup" msgid="6912230525140589891">"Permetta a l\'applicaziun da controllar il mecanissem da copias da segirezza e da restauraziun dal sistem. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_backup (6912230525140589891) -->
+ <skip />
<!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
<skip />
<!-- no translation found for permdesc_confirm_full_backup (1748762171637699562) -->
<skip />
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"mussar fanestras betg autorisadas"</string>
- <!-- outdated translation 5895082268284998469 --> <string name="permdesc_internalSystemWindow" msgid="6510907081810231374">"Permetta da crear fanestras destinadas per l\'utilisaziun da l\'interfatscha d\'utilisader interna dal sistem. Questa funcziun n\'è betg previsa per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_internalSystemWindow (7458387759461466397) -->
+ <skip />
<string name="permlab_systemAlertWindow" msgid="3372321942941168324">"mussar avertiments dal sistem"</string>
- <!-- outdated translation 5109622689323490558 --> <string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"Permetta ad ina applicaziun da mussar fanestras cun avertiments dal sistem. Applicaziuns donnegiusas pon uschia occupar l\'entir visur dal telefonin."</string>
+ <!-- no translation found for permdesc_systemAlertWindow (8507863469978066409) -->
+ <skip />
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"modifitgar la sveltezza globala da las animaziuns"</string>
- <!-- outdated translation 7181522138912391988 --> <string name="permdesc_setAnimationScale" msgid="6505093307223395456">"Permetta ad ina applicaziun da modifitgar da tut temp la sveltezza generala da las animaziuns (per las pudair far ir pli svelt u pli plaun)."</string>
- <!-- outdated translation 17124341698093865 --> <string name="permlab_manageAppTokens" msgid="1286505717050121370">"administrar tokens dad applicaziuns"</string>
- <!-- outdated translation 977127907524195988 --> <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Permetta ad applicaziuns da crear ed administrar lur agens tokens cun ignorar lur urden da zavrar Z normal. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_setAnimationScale (7690063428924343571) -->
+ <skip />
+ <!-- no translation found for permlab_manageAppTokens (1286505717050121370) -->
+ <skip />
+ <!-- no translation found for permdesc_manageAppTokens (8043431713014395671) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"smatgar tastas e tastas da controlla"</string>
- <!-- outdated translation 3946098050410874715 --> <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Permetta ad ina applicaziun da furnir ses agens cumonds (tastas smatgadas etc.) ad autras applicaziuns. Applicaziuns donnegiusas pon utilisar questa funcziunalitad per surpigliar la controlla da Voss telefonin."</string>
- <!-- outdated translation 3946098050410874715 --> <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Permetta ad ina applicaziun da furnir ses agens cumonds (tastas smatgadas etc.) ad autras applicaziuns. Applicaziuns donnegiusas pon utilisar questa funcziunalitad per surpigliar la controlla da Voss telefonin."</string>
+ <!-- no translation found for permdesc_injectEvents (206352565599968632) -->
+ <skip />
+ <!-- no translation found for permdesc_injectEvents (653128057572326253) -->
+ <skip />
<string name="permlab_readInputState" msgid="469428900041249234">"registrar endataziuns sur la tastatura ed acziuns"</string>
- <!-- outdated translation 5132879321450325445 --> <string name="permdesc_readInputState" msgid="8387754901688728043">"\"Permetta ad ina applicaziun dad identifitgar las tastas che Vus smatgais, era durant l\'utilisaziun dad in auter program (durant l\'endataziun dad in pled-clav, per exempel). Applicaziuns normalas na duessan betg avair access a questa funcziun.\""</string>
+ <!-- no translation found for permdesc_readInputState (8387754901688728043) -->
+ <skip />
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"associar cun ina metoda d\'endataziun"</string>
- <!-- outdated translation 3734838321027317228 --> <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Permetta da sa fixar al nivel d\'interfatscha pli aut dad ina metoda d\'endataziun. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_bindInputMethod (3250440322807286331) -->
+ <skip />
<!-- no translation found for permlab_bindTextService (7358378401915287938) -->
<skip />
<!-- no translation found for permdesc_bindTextService (8151968910973998670) -->
@@ -290,66 +374,112 @@
<!-- no translation found for permdesc_bindVpnService (2067845564581693905) -->
<skip />
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"sa fixar vid in fund davos"</string>
- <!-- outdated translation 5287754520361915347 --> <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permetta da sa fixar al nivel d\'interfatscha pli aut dad ina metoda d\'endataziun. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_bindWallpaper (7108428692595491668) -->
+ <skip />
<!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
<skip />
<!-- no translation found for permdesc_bindRemoteViews (4717987810137692572) -->
<skip />
<string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interacziun cun in administratur dad apparats"</string>
- <!-- outdated translation 8714424333082216979 --> <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permetta al possessur da trametter intenziuns a l\'administratur dal apparat periferic. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_bindDeviceAdmin (569715419543907930) -->
+ <skip />
<string name="permlab_setOrientation" msgid="3365947717163866844">"midar l\'orientaziun dal visur"</string>
- <!-- outdated translation 6335814461615851863 --> <string name="permdesc_setOrientation" msgid="3046126619316671476">"Permetta a l\'applicaziun da midar da tut temp la orientaziun dal visur. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_setOrientation (3046126619316671476) -->
+ <skip />
<!-- no translation found for permlab_setPointerSpeed (9175371613322562934) -->
<skip />
<!-- no translation found for permdesc_setPointerSpeed (6866563234274104233) -->
<skip />
- <!-- outdated translation 4255467255488653854 --> <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"trametter signals Linux a las applicaziuns"</string>
- <!-- outdated translation 3565530463215015289 --> <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"Permetta a l\'applicaziun da pretender ch\'il signal furnì vegnia tramess a tut ils process persistents."</string>
- <!-- outdated translation 8659652042401085862 --> <string name="permlab_persistentActivity" msgid="8841113627955563938">"exequir permanentamain applicaziuns"</string>
- <!-- outdated translation 5037199778265006008 --> <string name="permdesc_persistentActivity" msgid="4909910271316074418">"Permetta ad ina applicaziun da render persistent atgnas cumponentas per ch\'il sistem na po betg utilisar questas per autras applicaziuns."</string>
- <!-- outdated translation 3343439331576348805 --> <string name="permlab_deletePackages" msgid="184385129537705938">"stizzar applicaziuns"</string>
- <!-- outdated translation 3634943677518723314 --> <string name="permdesc_deletePackages" msgid="7411480275167205081">"Permetta ad ina applicaziun da stizzar pachets da datas Android. Applicaziuns donnegiusas pon utilisar questa funcziun per stizzar applicaziuns impurtantas."</string>
- <!-- outdated translation 2192134353540277878 --> <string name="permlab_clearAppUserData" msgid="274109191845842756">"stizzar datas dad ina autra applicaziun"</string>
- <!-- outdated translation 7546345080434325456 --> <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"Permetta ad ina applicaziun da stizzar las datas da l\'utilisader."</string>
- <!-- outdated translation 1518556602634276725 --> <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"stizzar ils caches dad autras applicaziuns"</string>
- <!-- outdated translation 2283074077168165971 --> <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Permetta ad ina applicaziun da stizzar las datotecas en il cache."</string>
- <!-- outdated translation 4799785352306641460 --> <string name="permlab_getPackageSize" msgid="7472921768357981986">"evaluar la capacitad da memoria occupada da l\'applicaziun"</string>
- <!-- outdated translation 5557253039670753437 --> <string name="permdesc_getPackageSize" msgid="3921068154420738296">"\"Permetta ad ina applicaziun dad obtegnair la grondezza dal code, da las datas e dal cache.\""</string>
- <!-- outdated translation 335800214119051089 --> <string name="permlab_installPackages" msgid="2199128482820306924">"installar directamain applicaziuns"</string>
- <!-- outdated translation 526669220850066132 --> <string name="permdesc_installPackages" msgid="5628530972548071284">"Permetta ad ina applicaziun dad installar pachets novs u actualisads dad Android. Applicaziuns donnegiusas pon utilisar questa funcziunalitad per agiuntar novas applicaziuns che han tut las permissiuns pussaivlas."</string>
- <!-- outdated translation 4747698311163766540 --> <string name="permlab_clearAppCache" msgid="7487279391723526815">"stizzar las datas dal cache da tut las applicaziuns"</string>
- <!-- outdated translation 7740465694193671402 --> <string name="permdesc_clearAppCache" product="tablet" msgid="3523396284474042284">"Permetta ad ina applicaziun da dar liber capacitad da memorisar dal telefonin cun stizzar datotecas en l\'ordinatur da cache da l\'applicaziun. L\'access è per regla limità a process da sistem."</string>
- <!-- outdated translation 7740465694193671402 --> <string name="permdesc_clearAppCache" product="default" msgid="5067988373366292186">"Permetta ad ina applicaziun da dar liber capacitad da memorisar dal telefonin cun stizzar datotecas en l\'ordinatur da cache da l\'applicaziun. L\'access è per regla limità a process da sistem."</string>
- <!-- outdated translation 728454979946503926 --> <string name="permlab_movePackage" msgid="3289890271645921411">"Spustar resursas d\'applicaziun"</string>
- <!-- outdated translation 6323049291923925277 --> <string name="permdesc_movePackage" msgid="319562217778244524">"Permetta ad ina applicaziun da spustar resursas d\'applicaziun dad in medium intern ad in medium extern e viceversa."</string>
- <!-- outdated translation 4811921703882532070 --> <string name="permlab_readLogs" msgid="6615778543198967614">"leger datotecas da protocol dal sistem"</string>
- <!-- outdated translation 2257937955580475902 --> <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Permetta ad ina applicaziun da leger las differentas datotecas da protocol dal sistem. Quai pussibilitescha dad obtegnair infurmaziuns generalas davart il diever da Voss telefon che na duessan betg cuntegnair datas persunalas u privatas."</string>
- <!-- outdated translation 2257937955580475902 --> <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Permetta ad ina applicaziun da leger las differentas datotecas da protocol dal sistem. Quai pussibilitescha dad obtegnair infurmaziuns generalas davart il diever da Voss telefon che na duessan betg cuntegnair datas persunalas u privatas."</string>
+ <!-- no translation found for permlab_signalPersistentProcesses (4539002991947376659) -->
+ <skip />
+ <!-- no translation found for permdesc_signalPersistentProcesses (4896992079182649141) -->
+ <skip />
+ <!-- no translation found for permlab_persistentActivity (8841113627955563938) -->
+ <skip />
+ <!-- no translation found for permdesc_persistentActivity (4909910271316074418) -->
+ <skip />
+ <!-- no translation found for permlab_deletePackages (184385129537705938) -->
+ <skip />
+ <!-- no translation found for permdesc_deletePackages (7411480275167205081) -->
+ <skip />
+ <!-- no translation found for permlab_clearAppUserData (274109191845842756) -->
+ <skip />
+ <!-- no translation found for permdesc_clearAppUserData (4625323684125459488) -->
+ <skip />
+ <!-- no translation found for permlab_deleteCacheFiles (3128665571837408675) -->
+ <skip />
+ <!-- no translation found for permdesc_deleteCacheFiles (3812998599006730196) -->
+ <skip />
+ <!-- no translation found for permlab_getPackageSize (7472921768357981986) -->
+ <skip />
+ <!-- no translation found for permdesc_getPackageSize (3921068154420738296) -->
+ <skip />
+ <!-- no translation found for permlab_installPackages (2199128482820306924) -->
+ <skip />
+ <!-- no translation found for permdesc_installPackages (5628530972548071284) -->
+ <skip />
+ <!-- no translation found for permlab_clearAppCache (7487279391723526815) -->
+ <skip />
+ <!-- no translation found for permdesc_clearAppCache (3523396284474042284) -->
+ <skip />
+ <!-- no translation found for permdesc_clearAppCache (5067988373366292186) -->
+ <skip />
+ <!-- no translation found for permlab_movePackage (3289890271645921411) -->
+ <skip />
+ <!-- no translation found for permdesc_movePackage (319562217778244524) -->
+ <skip />
+ <!-- no translation found for permlab_readLogs (6615778543198967614) -->
+ <skip />
+ <!-- no translation found for permdesc_readLogs (82061313293455151) -->
+ <skip />
+ <!-- no translation found for permdesc_readLogs (2063438140241560443) -->
+ <skip />
+ <!-- no translation found for permlab_anyCodecForPlayback (715805555823881818) -->
+ <skip />
+ <!-- no translation found for permdesc_anyCodecForPlayback (8283912488433189010) -->
+ <skip />
<string name="permlab_diagnostic" msgid="8076743953908000342">"leger/scriver en resursas che appartegnan a diagnostics"</string>
- <!-- outdated translation 3121238373951637049 --> <string name="permdesc_diagnostic" msgid="6608295692002452283">"Permetta ad ina applicaziun da leger e modifitgar tut ils elements ella gruppa da diagnosa (per exempel las datotecas en /dev). Quai po avair consequenzas negativas per la stabilitad e la segirezza dal sistem e duess vegnir permess mo a programs da diagnosa specifics per la hardware mess a disposiziun dal producider u dal gestiunari da la rait."</string>
- <!-- outdated translation 79425198834329406 --> <string name="permlab_changeComponentState" msgid="6335576775711095931">"activar u deactivar cumponentas dad applicaziuns"</string>
- <!-- outdated translation 4569107043246700630 --> <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"\"Permetta ad ina applicaziun dad activar u deactivar cumponentas dad autras applicaziuns. Applicaziuns donnegiusas pon uschia deactivar funcziuns impurtantas dal telefonin. Faschai attenziun cun permetter l\'access a questa funcziun perquai ch\'ella permetta da render nunduvrablas, incoerentas ed instabilas las cumponentas da las applicaziuns.\""</string>
- <!-- outdated translation 4569107043246700630 --> <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"\"Permetta ad ina applicaziun dad activar u deactivar cumponentas dad autras applicaziuns. Applicaziuns donnegiusas pon uschia deactivar funcziuns impurtantas dal telefonin. Faschai attenziun cun permetter l\'access a questa funcziun perquai ch\'ella permetta da render nunduvrablas, incoerentas ed instabilas las cumponentas da las applicaziuns.\""</string>
- <!-- outdated translation 3393305202145172005 --> <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"definir las applicaziuns preferidas"</string>
- <!-- outdated translation 760008293501937546 --> <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Permetta ad ina applicaziun da modifitgar Vossas applicaziuns preferidas. Applicaziuns donnegiusas pon uschia remplazzar en il zuppà applicaziuns che vegnan gist exequidas ed imitar Vossas applicaziuns existentas cun la finamira da rimnar datas persunalas da Vus."</string>
+ <!-- no translation found for permdesc_diagnostic (6608295692002452283) -->
+ <skip />
+ <!-- no translation found for permlab_changeComponentState (6335576775711095931) -->
+ <skip />
+ <!-- no translation found for permdesc_changeComponentState (8887435740982237294) -->
+ <skip />
+ <!-- no translation found for permdesc_changeComponentState (1827232484416505615) -->
+ <skip />
+ <!-- no translation found for permlab_setPreferredApplications (8463181628695396391) -->
+ <skip />
+ <!-- no translation found for permdesc_setPreferredApplications (4973986762241783712) -->
+ <skip />
<string name="permlab_writeSettings" msgid="1365523497395143704">"modifitgar parameters generals dal sistem"</string>
- <!-- outdated translation 838789419871034696 --> <string name="permdesc_writeSettings" msgid="7775723441558907181">"Permetta ad ina applicaziun da modifitgar las datas dals parameters dal sistem. Applicaziuns donnegiusas pon utilisar questa funcziun per donnegiar la configuraziun da Voss sistem."</string>
+ <!-- no translation found for permdesc_writeSettings (7775723441558907181) -->
+ <skip />
<string name="permlab_writeSecureSettings" msgid="204676251876718288">"modifitgar ils parameters da segirezza dal sistem"</string>
- <!-- outdated translation 5497873143539034724 --> <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Permetta ad ina applicaziun da modifitgar las datas da configuraziun da segirezza dal sistem. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_writeSecureSettings (8159535613020137391) -->
+ <skip />
<string name="permlab_writeGservices" msgid="2149426664226152185">"modifitgar Google Services Map"</string>
- <!-- outdated translation 6602362746516676175 --> <string name="permdesc_writeGservices" msgid="1287309437638380229">"Permetta ad ina applicaziun da modifitgar la charta da servetschs Google. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_writeGservices (1287309437638380229) -->
+ <skip />
<string name="permlab_receiveBootCompleted" msgid="7776779842866993377">"aviar automaticamain suenter ch\'il sistem è avià"</string>
- <!-- outdated translation 698336728415008796 --> <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"\"Permetta ad ina applicaziun dad aviar sasez suenter ch\'il sistem è vegnì avià. Qua tras po l\'aviar dal telefonin durar pli ditg, ultra da quai po l\'entir sistem vegnir retardà cun l\'activitad permanenta da l\'applicaziun.\""</string>
- <!-- outdated translation 698336728415008796 --> <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"\"Permetta ad ina applicaziun dad aviar sasez suenter ch\'il sistem è vegnì avià. Qua tras po l\'aviar dal telefonin durar pli ditg, ultra da quai po l\'entir sistem vegnir retardà cun l\'activitad permanenta da l\'applicaziun.\""</string>
+ <!-- no translation found for permdesc_receiveBootCompleted (7390304664116880704) -->
+ <skip />
+ <!-- no translation found for permdesc_receiveBootCompleted (513950589102617504) -->
+ <skip />
<string name="permlab_broadcastSticky" msgid="7919126372606881614">"trametter in broadcast permanent"</string>
- <!-- outdated translation 1920045289234052219 --> <string name="permdesc_broadcastSticky" product="tablet" msgid="1181582512022829259">"Permetta ad ina applicaziun da trametter broadcasts persistents che na sa serran betg a la fin dal broadcast. Applicaziuns donnegiusas pon uschia render plaun ed instabil il telefonin cun occupar memia blera memoria."</string>
- <!-- outdated translation 1920045289234052219 --> <string name="permdesc_broadcastSticky" product="default" msgid="3287869131621514325">"Permetta ad ina applicaziun da trametter broadcasts persistents che na sa serran betg a la fin dal broadcast. Applicaziuns donnegiusas pon uschia render plaun ed instabil il telefonin cun occupar memia blera memoria."</string>
+ <!-- no translation found for permdesc_broadcastSticky (1181582512022829259) -->
+ <skip />
+ <!-- no translation found for permdesc_broadcastSticky (3287869131621514325) -->
+ <skip />
<string name="permlab_readContacts" msgid="6219652189510218240">"leger las datas da contact"</string>
- <!-- outdated translation 3371591512896545975 --> <string name="permdesc_readContacts" product="tablet" msgid="4028657556924039119">"Permetta ad ina applicaziun da leger tut las datas da contacts (adressas) memorisadas sin Voss telefonin. Applicaziuns donnegiusas pon utilisar questa funcziun per trametter Vossas datas ad autras persunas."</string>
- <!-- outdated translation 3371591512896545975 --> <string name="permdesc_readContacts" product="default" msgid="2032222056456498547">"Permetta ad ina applicaziun da leger tut las datas da contacts (adressas) memorisadas sin Voss telefonin. Applicaziuns donnegiusas pon utilisar questa funcziun per trametter Vossas datas ad autras persunas."</string>
+ <!-- no translation found for permdesc_readContacts (4028657556924039119) -->
+ <skip />
+ <!-- no translation found for permdesc_readContacts (2032222056456498547) -->
+ <skip />
<string name="permlab_writeContacts" msgid="644616215860933284">"scriver datas da contact"</string>
- <!-- outdated translation 3924383579108183601 --> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Permetta ad ina applicaziun da modifitgar tut las datas da contact (adressas) memorisadas sin Voss telefonin. Applicaziuns donnegiusas pon utilisar questa funcziun per stizzar u modifitgar Vossas datas da contact."</string>
- <!-- outdated translation 3924383579108183601 --> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Permetta ad ina applicaziun da modifitgar tut las datas da contact (adressas) memorisadas sin Voss telefonin. Applicaziuns donnegiusas pon utilisar questa funcziun per stizzar u modifitgar Vossas datas da contact."</string>
+ <!-- no translation found for permdesc_writeContacts (988969759110632978) -->
+ <skip />
+ <!-- no translation found for permdesc_writeContacts (5075164818647934067) -->
+ <skip />
<!-- no translation found for permlab_readProfile (6824681438529842282) -->
<skip />
<!-- no translation found for permdesc_readProfile (94520753797630679) -->
@@ -366,59 +496,96 @@
<skip />
<!-- no translation found for permdesc_writeSocialStream (3496277176955721451) -->
<skip />
- <!-- outdated translation 6898987798303840534 --> <string name="permlab_readCalendar" msgid="5972727560257612398">"leger eveniments da chalender"</string>
- <!-- outdated translation 5533029139652095734 --> <string name="permdesc_readCalendar" product="tablet" msgid="2338414551004122687">"Permetta ad ina applicaziun da leger tut ils eveniments da chalender memorisads sin Voss telefonin. Applicaziuns donnegiusas pon uschia trametter Voss eveniments da chalender ad autras persunas."</string>
- <!-- outdated translation 5533029139652095734 --> <string name="permdesc_readCalendar" product="default" msgid="5693933067751827753">"Permetta ad ina applicaziun da leger tut ils eveniments da chalender memorisads sin Voss telefonin. Applicaziuns donnegiusas pon uschia trametter Voss eveniments da chalender ad autras persunas."</string>
- <!-- outdated translation 3894879352594904361 --> <string name="permlab_writeCalendar" msgid="8438874755193825647">"agiuntar u modifitgar eveniments en il chalender e trametter e-mails als envidads"</string>
- <!-- outdated translation 2988871373544154221 --> <string name="permdesc_writeCalendar" msgid="2243771395254848873">"Permetta ad ina applicaziun dad agiuntar u modifitgar eveniments en Voss chalender che pon trametter e-mails ad envidads. Applicaziuns donnegiusas pon uschia stizzar u modifitgar las datas en Voss chalender u trametter e-mails ad envidads."</string>
+ <!-- no translation found for permlab_readCalendar (5972727560257612398) -->
+ <skip />
+ <!-- no translation found for permdesc_readCalendar (2338414551004122687) -->
+ <skip />
+ <!-- no translation found for permdesc_readCalendar (5693933067751827753) -->
+ <skip />
+ <!-- no translation found for permlab_writeCalendar (8438874755193825647) -->
+ <skip />
+ <!-- no translation found for permdesc_writeCalendar (2243771395254848873) -->
+ <skip />
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"creaziun da funtaunas da posiziun fictivas per motivs da test"</string>
- <!-- outdated translation 7648286063459727252 --> <string name="permdesc_accessMockLocation" msgid="7577931556422993949">"Permetta da crear funtaunas da localisaziun fictivas per motivs da test. Applicaziuns donnegiusas pon uschia remplazzar la posiziun ed il status returnà da las vairas funtaunas sco GPS u Voss gestiunari da la rait."</string>
+ <!-- no translation found for permdesc_accessMockLocation (7577931556422993949) -->
+ <skip />
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"access als cumonds supplementars da purschiders da posiziuns geograficas"</string>
- <!-- outdated translation 1948144701382451721 --> <string name="permdesc_accessLocationExtraCommands" msgid="6737736970602176133">"Permetta d\'acceder a cumonds supplementars da purschiders da posiziuns geograficas. Applicaziuns donnegiusas pon uschia eventualmain disturbar il funcziunament da GPS u autras funtaunas da localisaziun geografica."</string>
+ <!-- no translation found for permdesc_accessLocationExtraCommands (6737736970602176133) -->
+ <skip />
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"permetter l\'installaziun d\'in purschider da servetschs da localisaziun"</string>
- <!-- outdated translation 5449175116732002106 --> <string name="permdesc_installLocationProvider" msgid="1742577679350078373">"Crear funtaunas da localisaziun fictivas per motivs da test. Applicaziuns donnegiusas pon uschia remplazzar la posiziun ed il status returnads da las funtaunas vairas sco GPS u Voss gestiunari da la rait u survegliar Vossa posiziun geografica e la transmetter ad ina funtauna externa."</string>
+ <!-- no translation found for permdesc_installLocationProvider (1742577679350078373) -->
+ <skip />
<string name="permlab_accessFineLocation" msgid="8116127007541369477">"posiziun exacta (GPS)"</string>
- <!-- outdated translation 7411213317434337331 --> <string name="permdesc_accessFineLocation" product="tablet" msgid="5326423948268164934">"Permetta d\'acceder a funtaunas da localisaziun exactas sco GPS (Global Positioning System) sche in tal è disponibel. Applicaziuns donnegiusas pon uschia identifitgar Vossa posiziun geografica e consumar energia supplementara da l\'accu."</string>
- <!-- outdated translation 7411213317434337331 --> <string name="permdesc_accessFineLocation" product="default" msgid="7130267914433890869">"Permetta d\'acceder a funtaunas da localisaziun exactas sco GPS (Global Positioning System) sche in tal è disponibel. Applicaziuns donnegiusas pon uschia identifitgar Vossa posiziun geografica e consumar energia supplementara da l\'accu."</string>
+ <!-- no translation found for permdesc_accessFineLocation (5326423948268164934) -->
+ <skip />
+ <!-- no translation found for permdesc_accessFineLocation (7130267914433890869) -->
+ <skip />
<string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"Posiziun geografica approximativa (sin basa da la rait)"</string>
- <!-- outdated translation 8235655958070862293 --> <string name="permdesc_accessCoarseLocation" product="tablet" msgid="5460726396318105483">"\"Acceda a funtaunas approximativas da localisaziun (per exempel bancas da datas da raits mobilas) per determinar la posiziun geografica dal telefonin, sche questa opziun è disponibla. Applicaziuns donnegiusas pon utilisar questa funcziun per vegnir a savair nua che Vus sa chattais circa.\""</string>
- <!-- outdated translation 8235655958070862293 --> <string name="permdesc_accessCoarseLocation" product="default" msgid="8900795778057579522">"\"Acceda a funtaunas approximativas da localisaziun (per exempel bancas da datas da raits mobilas) per determinar la posiziun geografica dal telefonin, sche questa opziun è disponibla. Applicaziuns donnegiusas pon utilisar questa funcziun per vegnir a savair nua che Vus sa chattais circa.\""</string>
+ <!-- no translation found for permdesc_accessCoarseLocation (5460726396318105483) -->
+ <skip />
+ <!-- no translation found for permdesc_accessCoarseLocation (8900795778057579522) -->
+ <skip />
<string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"access a SurfaceFlinger"</string>
- <!-- outdated translation 6805241830020733025 --> <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permetta ad ina applicaziun dad utilisar las funcziuns SurfaceFlinger datiers al nivel dal sistem."</string>
+ <!-- no translation found for permdesc_accessSurfaceFlinger (1041619516733293551) -->
+ <skip />
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"leger il paraculp da frame"</string>
- <!-- outdated translation 5777679658669057819 --> <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permetta ad ina applicaziun da leger il cuntegn dal paraculp da frame."</string>
+ <!-- no translation found for permdesc_readFrameBuffer (4937405521809454680) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"modifitgar Voss parameters audio"</string>
- <!-- outdated translation 5793461287365991922 --> <string name="permdesc_modifyAudioSettings" msgid="7343951185408396919">"Permetta a l\'applicaziun da modifitgar ils parameters generals dad audio (per exempel il volumen e routing)."</string>
+ <!-- no translation found for permdesc_modifyAudioSettings (7343951185408396919) -->
+ <skip />
<string name="permlab_recordAudio" msgid="3876049771427466323">"registrar audio"</string>
- <!-- outdated translation 6493228261176552356 --> <string name="permdesc_recordAudio" msgid="2387462233976248635">"Permetta a l\'applicaziun dad acceder a la via d\'access per registraziuns dad audio."</string>
+ <!-- no translation found for permdesc_recordAudio (2387462233976248635) -->
+ <skip />
<string name="permlab_camera" msgid="3616391919559751192">"fotografar e registrar videos"</string>
- <!-- outdated translation 6004878235852154239 --> <string name="permdesc_camera" msgid="1507407407002492176">"Permetta a l\'applicaziun da fotografar e da registrar videos cun la camera. Uschia po l\'applicaziun rimnar da tut temp maletgs fatgs cun la camera."</string>
- <!-- outdated translation 8337817093326370537 --> <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"deactivar permanentamain il telefonin"</string>
+ <!-- no translation found for permdesc_camera (1507407407002492176) -->
+ <skip />
+ <!-- no translation found for permlab_brick (2961292205764488304) -->
+ <skip />
<string name="permlab_brick" product="default" msgid="8337817093326370537">"deactivar permanentamain il telefonin"</string>
- <!-- outdated translation 5569526552607599221 --> <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Permetta ad ina applicaziun da deactivar definitivamain il telefon. Questa autorisaziun è fitg privlusa."</string>
- <!-- outdated translation 5569526552607599221 --> <string name="permdesc_brick" product="default" msgid="5788903297627283099">"Permetta ad ina applicaziun da deactivar definitivamain il telefon. Questa autorisaziun è fitg privlusa."</string>
- <!-- outdated translation 2898560872462638242 --> <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"sfurzar il telefonin da reaviar"</string>
+ <!-- no translation found for permdesc_brick (4334818808001699530) -->
+ <skip />
+ <!-- no translation found for permdesc_brick (5788903297627283099) -->
+ <skip />
+ <!-- no translation found for permlab_reboot (3436634972561795002) -->
+ <skip />
<string name="permlab_reboot" product="default" msgid="2898560872462638242">"sfurzar il telefonin da reaviar"</string>
- <!-- outdated translation 7914933292815491782 --> <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Permetta a l\'applicaziun da sfurzar il telefonin da reaviar."</string>
- <!-- outdated translation 7914933292815491782 --> <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Permetta a l\'applicaziun da sfurzar il telefonin da reaviar."</string>
+ <!-- no translation found for permdesc_reboot (8172056180063700741) -->
+ <skip />
+ <!-- no translation found for permdesc_reboot (5326008124289989969) -->
+ <skip />
<string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"montar e demontar sistems da datotecas"</string>
- <!-- outdated translation 6253263792535859767 --> <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Permetta a l\'applicaziun da montar e demontar sistems da datotecas per apparats periferics da memoria mobila."</string>
+ <!-- no translation found for permdesc_mount_unmount_filesystems (1829290701658992347) -->
+ <skip />
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formataziun da la memoria externa"</string>
- <!-- outdated translation 574060044906047386 --> <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Permetta a l\'applicaziun da formatar memoria mobila."</string>
- <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"obtegnair infurmaziuns davart la memoria segira"</string>
- <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="3094563844593878548">"Permetta a l\'applicaziun dad obtegnair infurmaziuns davart la memoria segira."</string>
- <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"crear ina memoria segira"</string>
- <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="4558869273585856876">"Permetta a l\'applicaziun da crear ina memoria segira."</string>
- <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"allontanar la memoria segira"</string>
- <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="7218749286145526537">"Permetta a l\'applicaziun dad allontanar la memoria segira."</string>
- <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"montar/demontar la memoria segira"</string>
- <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Permetta a l\'applicaziun da montar/demontar la memoria segira."</string>
- <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"renumnar la memoria segira"</string>
- <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="1794757588472127675">"Permetta a l\'applicaziun da renumnar la memoria segira."</string>
+ <!-- no translation found for permdesc_mount_format_filesystems (8784268246779198627) -->
+ <skip />
+ <!-- no translation found for permlab_asec_access (3411338632002193846) -->
+ <skip />
+ <!-- no translation found for permdesc_asec_access (3094563844593878548) -->
+ <skip />
+ <!-- no translation found for permlab_asec_create (6414757234789336327) -->
+ <skip />
+ <!-- no translation found for permdesc_asec_create (4558869273585856876) -->
+ <skip />
+ <!-- no translation found for permlab_asec_destroy (526928328301618022) -->
+ <skip />
+ <!-- no translation found for permdesc_asec_destroy (7218749286145526537) -->
+ <skip />
+ <!-- no translation found for permlab_asec_mount_unmount (8877998101944999386) -->
+ <skip />
+ <!-- no translation found for permdesc_asec_mount_unmount (3451360114902490929) -->
+ <skip />
+ <!-- no translation found for permlab_asec_rename (7496633954080472417) -->
+ <skip />
+ <!-- no translation found for permdesc_asec_rename (1794757588472127675) -->
+ <skip />
<string name="permlab_vibrate" msgid="7768356019980849603">"controllar la vibraziun"</string>
- <!-- outdated translation 2886677177257789187 --> <string name="permdesc_vibrate" msgid="6284989245902300945">"Permetta a l\'applicaziun da controllar la vibraziun."</string>
+ <!-- no translation found for permdesc_vibrate (6284989245902300945) -->
+ <skip />
<string name="permlab_flashlight" msgid="2155920810121984215">"controllar la glischina"</string>
- <!-- outdated translation 6433045942283802309 --> <string name="permdesc_flashlight" msgid="6522284794568368310">"Permetta a l\'applicaziun da controllar la glischina."</string>
+ <!-- no translation found for permdesc_flashlight (6522284794568368310) -->
+ <skip />
<!-- no translation found for permlab_manageUsb (1113453430645402723) -->
<skip />
<!-- no translation found for permdesc_manageUsb (7776155430218239833) -->
@@ -428,112 +595,180 @@
<!-- no translation found for permdesc_accessMtp (6532961200486791570) -->
<skip />
<string name="permlab_hardware_test" msgid="4148290860400659146">"testar la hardware"</string>
- <!-- outdated translation 3668894686500081699 --> <string name="permdesc_hardware_test" msgid="6597964191208016605">"Permetta ad ina applicaziun da controllar differents apparats periferics per motivs da test da hardware."</string>
+ <!-- no translation found for permdesc_hardware_test (6597964191208016605) -->
+ <skip />
<string name="permlab_callPhone" msgid="3925836347681847954">"telefonar directamain a numers da telefon"</string>
- <!-- outdated translation 3369867353692722456 --> <string name="permdesc_callPhone" msgid="6396463004110544744">"Permetta a l\'applicaziun da far telefons senza Vossa intervenziun. Applicaziuns donnegiusas pon uschia chaschunar telefons nunspetgads sin Voss quint da telefon. Questa funcziun permetta dentant betg da telefonar a numers d\'urgenza."</string>
+ <!-- no translation found for permdesc_callPhone (6396463004110544744) -->
+ <skip />
<string name="permlab_callPrivileged" msgid="4198349211108497879">"telefonar directamain a mintga numer"</string>
- <!-- outdated translation 244405067160028452 --> <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Permetta a l\'applicaziun da cumponer mintga numer (inclus numers d\'urgenza) senza Vossa intervenziun. Applicaziuns donnegiusas pon uschia far telefons nunnecessaris ed illegals a numers d\'urgenza."</string>
- <!-- outdated translation 5604848095315421425 --> <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"aviar directamain la configuraziun dal telefonin CDMA"</string>
+ <!-- no translation found for permdesc_callPrivileged (1689024901509996810) -->
+ <skip />
+ <!-- no translation found for permlab_performCdmaProvisioning (4842576994144604821) -->
+ <skip />
<string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"aviar directamain la configuraziun dal telefonin CDMA"</string>
- <!-- outdated translation 6457447676108355905 --> <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Permetta a l\'applicaziun dad aviar il provediment CDMA. Applicaziuns donnegiusas pon uschia aviar inutilmain il provediment CDMA."</string>
+ <!-- no translation found for permdesc_performCdmaProvisioning (1994193538802314186) -->
+ <skip />
<string name="permlab_locationUpdates" msgid="7785408253364335740">"controllar ils avis ad actualisaziuns da la posiziun geografica"</string>
- <!-- outdated translation 2300018303720930256 --> <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Permetta l\'activaziun/deactivaziun dad avis ad actualisaziuns da la posiziun geografica che derivan dal signal da radio. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_locationUpdates (1120741557891438876) -->
+ <skip />
<string name="permlab_checkinProperties" msgid="7855259461268734914">"access a las caracteristicas check-in"</string>
- <!-- outdated translation 7150307006141883832 --> <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Permetta l\'access (leger e scriver) ad elements transmess dal servetsch check-in. Betg previs per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_checkinProperties (4024526968630194128) -->
+ <skip />
<string name="permlab_bindGadget" msgid="776905339015863471">"tscherner ils widgets"</string>
- <!-- outdated translation 2098697834497452046 --> <string name="permdesc_bindGadget" msgid="8261326938599049290">"Permetta a l\'applicaziun dad annunziar al sistem tge widgets che pon vegnir utilisads da tge applicaziun. Cun questa permissiun pon applicaziuns autorisar l\'access a datas persunalas per autras applicaziuns. Questa opziun n\'è betg previsa per applicaziuns normalas."</string>
+ <!-- no translation found for permdesc_bindGadget (8261326938599049290) -->
+ <skip />
<string name="permlab_modifyPhoneState" msgid="8423923777659292228">"modifitgar il status dal telefon"</string>
- <!-- outdated translation 3302284561346956587 --> <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"\"Permetta ad ina applicaziun da controllar las funcziunalitads telefonicas da l\'apparat. Ina applicaziun po uschia midar la rait, deactivar ed activar il signal radiofonic dal telefon etc. senza As avertir.\""</string>
+ <!-- no translation found for permdesc_modifyPhoneState (1029877529007686732) -->
+ <skip />
<string name="permlab_readPhoneState" msgid="2326172951448691631">"leger il status e l\'identitad dal telefon"</string>
- <!-- outdated translation 8987653603298258459 --> <string name="permdesc_readPhoneState" msgid="5127767618743602782">"\"Permetta a l\'applicaziun dad acceder a las funcziuns da clom dal telefonin. Ina applicaziun cun questas permissiuns po eruir il numer che quest telefonin utilisescha, schebain i vegn telefonà ed identifitgar il numer clamà etc.\""</string>
- <!-- outdated translation 573480187941496130 --> <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"evitar ch\'il telefon midia en il modus stand-by"</string>
+ <!-- no translation found for permdesc_readPhoneState (5127767618743602782) -->
+ <skip />
+ <!-- no translation found for permlab_wakeLock (1531731435011495015) -->
+ <skip />
<string name="permlab_wakeLock" product="default" msgid="573480187941496130">"evitar ch\'il telefon midia en il modus stand-by"</string>
- <!-- outdated translation 7584036471227467099 --> <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Permetta ad ina applicaziun dad evitar ch\'il telefon midia en il modus standby."</string>
- <!-- outdated translation 7584036471227467099 --> <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Permetta ad ina applicaziun dad evitar ch\'il telefon midia en il modus standby."</string>
- <!-- outdated translation 4928622470980943206 --> <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"metter en/ord funcziun l\'apparat"</string>
+ <!-- no translation found for permdesc_wakeLock (7311319824400447868) -->
+ <skip />
+ <!-- no translation found for permdesc_wakeLock (8559100677372928754) -->
+ <skip />
+ <!-- no translation found for permlab_devicePower (2787034722616350417) -->
+ <skip />
<string name="permlab_devicePower" product="default" msgid="4928622470980943206">"metter en/ord funcziun l\'apparat"</string>
- <!-- outdated translation 4577331933252444818 --> <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Permetta ad ina applicaziun dad activar u deactivar il telefonin."</string>
- <!-- outdated translation 4577331933252444818 --> <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Permetta ad ina applicaziun dad activar u deactivar il telefonin."</string>
+ <!-- no translation found for permdesc_devicePower (6689862878984631831) -->
+ <skip />
+ <!-- no translation found for permdesc_devicePower (6037057348463131032) -->
+ <skip />
<string name="permlab_factoryTest" msgid="3715225492696416187">"exequir en il modus da test da fabrica"</string>
- <!-- outdated translation 8136644990319244802 --> <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Permetta d\'exequir sco test da fabrica datiers al nivel dal sistem cun autorisar l\'access a la hardware dal telefonin. Questa funcziunalitad è mo disponibla sch\'il telefonin sa chatta en il modus da test da fabrica."</string>
+ <!-- no translation found for permdesc_factoryTest (3952059318359653091) -->
+ <skip />
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Permetta d\'exequir sco test da fabrica datiers al nivel dal sistem cun autorisar l\'access a la hardware dal telefonin. Questa funcziunalitad è mo disponibla sch\'il telefonin sa chatta en il modus da test da fabrica."</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"definir la culissa"</string>
- <!-- outdated translation 6417041752170585837 --> <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Permetta a l\'applicaziun da definir il fund davos dal sistem."</string>
+ <!-- no translation found for permdesc_setWallpaper (7373447920977624745) -->
+ <skip />
<string name="permlab_setWallpaperHints" msgid="3600721069353106851">"definir ils indicaturs da grondezza per il fund davos"</string>
- <!-- outdated translation 6019479164008079626 --> <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Permetta a l\'applicaziun da definir la grondezza dal fund dal visur."</string>
+ <!-- no translation found for permdesc_setWallpaperHints (8235784384223730091) -->
+ <skip />
<string name="permlab_masterClear" msgid="2315750423139697397">"reinizialisar il sistem cun ses parameters originals"</string>
- <!-- outdated translation 5033465107545174514 --> <string name="permdesc_masterClear" msgid="3665380492633910226">"\"Permetta ad ina applicaziun da restaurar il stadi original dal sistem. Qua tras vegnan tut las datas, las configuraziuns e las applicaziuns installadas stizzadas.\""</string>
+ <!-- no translation found for permdesc_masterClear (3665380492633910226) -->
+ <skip />
<string name="permlab_setTime" msgid="2021614829591775646">"drizzar l\'ura"</string>
- <!-- outdated translation 667294309287080045 --> <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Permetta ad ina applicaziun da drizzar l\'ura dal telefonin."</string>
- <!-- outdated translation 667294309287080045 --> <string name="permdesc_setTime" product="default" msgid="1855702730738020">"Permetta ad ina applicaziun da drizzar l\'ura dal telefonin."</string>
+ <!-- no translation found for permdesc_setTime (1896341438151152881) -->
+ <skip />
+ <!-- no translation found for permdesc_setTime (1855702730738020) -->
+ <skip />
<string name="permlab_setTimeZone" msgid="2945079801013077340">"definir la zona d\'urari"</string>
- <!-- outdated translation 1902540227418179364 --> <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Permetta ad ina applicaziun da modifitgar la zona d\'urari dal telefonin."</string>
- <!-- outdated translation 1902540227418179364 --> <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Permetta ad ina applicaziun da modifitgar la zona d\'urari dal telefonin."</string>
+ <!-- no translation found for permdesc_setTimeZone (1676983712315827645) -->
+ <skip />
+ <!-- no translation found for permdesc_setTimeZone (4499943488436633398) -->
+ <skip />
<string name="permlab_accountManagerService" msgid="4829262349691386986">"agir sco administratur da contos"</string>
- <!-- outdated translation 6056903274106394752 --> <string name="permdesc_accountManagerService" msgid="2684502137670299915">"Permetta ad ina applicaziun da telefonar ad autentificaturs da contos."</string>
+ <!-- no translation found for permdesc_accountManagerService (1948455552333615954) -->
+ <skip />
<string name="permlab_getAccounts" msgid="4549918644233460103">"tschertgar contos enconuschents"</string>
- <!-- outdated translation 6839262446413155394 --> <string name="permdesc_getAccounts" product="tablet" msgid="3238360555257773358">"Permetta ad ina applicaziun da consultar la glista dals contos enconuschents al telefonin."</string>
- <!-- outdated translation 6839262446413155394 --> <string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Permetta ad ina applicaziun da consultar la glista dals contos enconuschents al telefonin."</string>
+ <!-- no translation found for permdesc_getAccounts (3238360555257773358) -->
+ <skip />
+ <!-- no translation found for permdesc_getAccounts (2735689364629830348) -->
+ <skip />
<string name="permlab_authenticateAccounts" msgid="3940505577982882450">"agir sco autentificatur da contos"</string>
- <!-- outdated translation 4006839406474208874 --> <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"\"Permetta ad ina applicaziun dad utilisar las funcziuns d\'autentificaziun da conto da l\'administratur da contos, inclus funcziuns per crear contos ed obtegnair e definir lur pleds-clav.\""</string>
+ <!-- no translation found for permdesc_authenticateAccounts (5472124296908977260) -->
+ <skip />
<string name="permlab_manageAccounts" msgid="4440380488312204365">"administrar la glista da contos"</string>
- <!-- outdated translation 8804114016661104517 --> <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Permetta ad ina applicaziun dad agiuntar ed allontanar contos e stizzar lur pleds-clav."</string>
+ <!-- no translation found for permdesc_manageAccounts (8698295625488292506) -->
+ <skip />
<string name="permlab_useCredentials" msgid="6401886092818819856">"utilisar las infurmaziuns dad autentificaziun dad in conto"</string>
- <!-- outdated translation 7416570544619546974 --> <string name="permdesc_useCredentials" msgid="7984227147403346422">"Permetta ad ina applicaziun da dumandar tokens d\'autentificaziun."</string>
+ <!-- no translation found for permdesc_useCredentials (7984227147403346422) -->
+ <skip />
<string name="permlab_accessNetworkState" msgid="6865575199464405769">"mussar il status da la rait"</string>
- <!-- outdated translation 558721128707712766 --> <string name="permdesc_accessNetworkState" msgid="479772796952547198">"Permetta ad ina applicaziun da vesair ils status da tut las raits."</string>
+ <!-- no translation found for permdesc_accessNetworkState (479772796952547198) -->
+ <skip />
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"access cumplet a l\'internet"</string>
- <!-- outdated translation 4593339106921772192 --> <string name="permdesc_createNetworkSockets" msgid="5963922297444265950">"Permetta ad ina applicaziun da crear sockets da rait."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"scriver parameters per nums da puncts d\'access"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"\"Permetta ad ina applicaziun da modifitgar ils parameters APN (num dals puncts d\'access), sco proxy ni port da mintga APN.\""</string>
+ <!-- no translation found for permdesc_createNetworkSockets (5963922297444265950) -->
+ <skip />
+ <!-- no translation found for permlab_writeApnSettings (505660159675751896) -->
+ <skip />
+ <!-- no translation found for permdesc_writeApnSettings (5333798886412714193) -->
+ <skip />
<string name="permlab_changeNetworkState" msgid="958884291454327309">"modifitgar la connectivitad da la rait"</string>
- <!-- outdated translation 4199958910396387075 --> <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Permetta ad ina applicaziun da modifitgar il status da connectivitad da la rait."</string>
- <!-- outdated translation 2702121155761140799 --> <string name="permlab_changeTetherState" msgid="5952584964373017960">"midar la connectivitad da tethering"</string>
- <!-- outdated translation 8905815579146349568 --> <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Permetta ad ina applicaziun da modifitgar il status da connectivitad dal tethering."</string>
+ <!-- no translation found for permdesc_changeNetworkState (6789123912476416214) -->
+ <skip />
+ <!-- no translation found for permlab_changeTetherState (5952584964373017960) -->
+ <skip />
+ <!-- no translation found for permdesc_changeTetherState (1524441344412319780) -->
+ <skip />
<string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"modifitgar il parameter d\'utilisaziun da datas dal fund davos"</string>
- <!-- outdated translation 1001482853266638864 --> <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Permetta ad ina applicaziun da modifitgar il parameters d\'utilisaziun da las datas dal fund davos."</string>
+ <!-- no translation found for permdesc_changeBackgroundDataSetting (5347729578468744379) -->
+ <skip />
<string name="permlab_accessWifiState" msgid="8100926650211034400">"mussar il status WLAN"</string>
- <!-- outdated translation 485796529139236346 --> <string name="permdesc_accessWifiState" msgid="7770452658226256831">"Permetta ad ina applicaziun da vesair las infurmaziuns concernent il status WLAN."</string>
+ <!-- no translation found for permdesc_accessWifiState (7770452658226256831) -->
+ <skip />
<string name="permlab_changeWifiState" msgid="7280632711057112137">"modifitgar il status WLAN"</string>
- <!-- outdated translation 2950383153656873267 --> <string name="permdesc_changeWifiState" msgid="7399961004537946240">"\"Permetta ad ina applicaziun da stabilir ina connexiun a puncts d\'access WLAN, da sa deconnectar da quels e da modifitgar ils parameters da raits WLAN configuradas.\""</string>
+ <!-- no translation found for permdesc_changeWifiState (7399961004537946240) -->
+ <skip />
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"permetter la recepziun da multicast WLAN"</string>
- <!-- outdated translation 8199464507656067553 --> <string name="permdesc_changeWifiMulticastState" msgid="7633598524564320817">"Permetta ad ina applicaziun da retschaiver pachets da datas che n\'èn betg adressads directamain a Voss apparat. Quai po esser nizzaivel per tschertgar servetschs che vegnan mess a disposiziun en il conturn. Consumescha dapli energia ch\'il modus betg-multicast."</string>
- <!-- outdated translation 1092209628459341292 --> <string name="permlab_bluetoothAdmin" msgid="3606576270792236062">"administraziun bluetooth"</string>
- <!-- outdated translation 7256289774667054555 --> <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"\"Permetta ad ina applicaziun da configurar il telefon bluetooth local, dad identifitgar apparats periferics a distanza e d\'als associar cun il telefon.\""</string>
- <!-- outdated translation 7256289774667054555 --> <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"\"Permetta ad ina applicaziun da configurar il telefon bluetooth local, dad identifitgar apparats periferics a distanza e d\'als associar cun il telefon.\""</string>
+ <!-- no translation found for permdesc_changeWifiMulticastState (7633598524564320817) -->
+ <skip />
+ <!-- no translation found for permlab_bluetoothAdmin (3606576270792236062) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetoothAdmin (6921177471748882137) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetoothAdmin (8931682159331542137) -->
+ <skip />
+ <!-- no translation found for permlab_accessWimaxState (1232061307208861588) -->
+ <skip />
+ <!-- no translation found for permdesc_accessWimaxState (5914958077555177749) -->
+ <skip />
+ <!-- no translation found for permlab_changeWimaxState (2405042267131496579) -->
+ <skip />
+ <!-- no translation found for permdesc_changeWimaxState (3328853825006455912) -->
+ <skip />
<string name="permlab_bluetooth" msgid="8361038707857018732">"stabilir connexiuns bluetooth"</string>
- <!-- outdated translation 762515380679392945 --> <string name="permdesc_bluetooth" product="tablet" msgid="7007851048416363446">"Permetta ad ina applicaziun dad obtegnair la configuraziun dal telefon bluetooth local e da crear ed acceptar connexiuns ad apparats associads."</string>
- <!-- outdated translation 762515380679392945 --> <string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Permetta ad ina applicaziun dad obtegnair la configuraziun dal telefon bluetooth local e da crear ed acceptar connexiuns ad apparats associads."</string>
+ <!-- no translation found for permdesc_bluetooth (7007851048416363446) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetooth (31846362767164948) -->
+ <skip />
<!-- no translation found for permlab_nfc (4423351274757876953) -->
<skip />
<!-- no translation found for permdesc_nfc (7120611819401789907) -->
<skip />
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"deactivar la bloccaziun da la tastatura"</string>
- <!-- outdated translation 3189763479326302017 --> <string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Permetta ad ina applicaziun da deactivar la bloccaziun da la tastatura e la protecziun cun il pled-clav associada. In exempel dad ina utilisaziun legitima: La bloccaziun da la tastatura vegn deactivada sche Vus retschavais in clom ed ella vegn reactivada sche Vus finis il telefon."</string>
+ <!-- no translation found for permdesc_disableKeyguard (6231611286892232626) -->
+ <skip />
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"leger ils parameters da sincronisaziun"</string>
- <!-- outdated translation 5315925706353341823 --> <string name="permdesc_readSyncSettings" msgid="5464056785274229278">"Permetta ad ina applicaziun da leger ils parameters da sincronisaziun (per exempel per savair sche la sincronisaziun da contacts è activà u betg)."</string>
+ <!-- no translation found for permdesc_readSyncSettings (5464056785274229278) -->
+ <skip />
<string name="permlab_writeSyncSettings" msgid="6297138566442486462">"scriver configuraziuns da sincronisaziun"</string>
- <!-- outdated translation 2498201614431360044 --> <string name="permdesc_writeSyncSettings" msgid="1466056564502117130">"Permetta ad ina applicaziun da modifitgar ils parameters da sincronisaziun. Uschia po ella per exempel activar e deactivar la sincronisaziun da contacts."</string>
+ <!-- no translation found for permdesc_writeSyncSettings (1466056564502117130) -->
+ <skip />
<string name="permlab_readSyncStats" msgid="7396577451360202448">"leger las statisticas da sincronisaziun"</string>
- <!-- outdated translation 7511448343374465000 --> <string name="permdesc_readSyncStats" msgid="3801971839939951678">"Permetta ad ina applicaziun da leger las statisticas da sincronisaziun (per exempel la cronologia da las sincronisaziuns exequidas)."</string>
+ <!-- no translation found for permdesc_readSyncStats (3801971839939951678) -->
+ <skip />
<string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"leger feeds abunads"</string>
- <!-- outdated translation 3622200625634207660 --> <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permetta ad ina applicaziun dad obtegnair infurmaziuns davart ils feeds actualisads dacurt."</string>
+ <!-- no translation found for permdesc_subscribedFeedsRead (5557058907906144505) -->
+ <skip />
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"scriver feeds abunads"</string>
- <!-- outdated translation 8121607099326533878 --> <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Permetta ad ina applicaziun da modifitgar Voss feeds sincronisads dacurt. Applicaziuns donnegiusas pudessan uschia modifitgar Voss feeds sincronisads."</string>
- <!-- outdated translation 432535716804748781 --> <string name="permlab_readDictionary" msgid="8410247960433376352">"leger il dicziunari definì da l\'utilisader"</string>
- <!-- outdated translation 1082972603576360690 --> <string name="permdesc_readDictionary" msgid="8977815988329283705">"Permetta ad ina applicaziun da leger tut ils pleds e nums privats e las expressiuns privatas che in utilisader ha memorisà en ses dicziunari."</string>
- <!-- outdated translation 6703109511836343341 --> <string name="permlab_writeDictionary" msgid="2296383164914812772">"scriver en il dicziunari definì da l\'utilisader"</string>
- <!-- outdated translation 2241256206524082880 --> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permetta ad ina applicaziun da scriver novs pleds en il dicziunari dal utilisader."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modifitgar/stizzar cuntegns da la carta SD"</string>
+ <!-- no translation found for permdesc_subscribedFeedsWrite (6928930188826089413) -->
+ <skip />
+ <!-- no translation found for permlab_readDictionary (8410247960433376352) -->
+ <skip />
+ <!-- no translation found for permdesc_readDictionary (8977815988329283705) -->
+ <skip />
+ <!-- no translation found for permlab_writeDictionary (2296383164914812772) -->
+ <skip />
+ <!-- no translation found for permdesc_writeDictionary (8185385716255065291) -->
+ <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>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permetta ad ina applicaziun da scriver sin la carta SD."</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permetta ad ina applicaziun da scriver sin la carta SD."</string>
+ <!-- no translation found for permdesc_sdcardWrite (6175406299445710888) -->
+ <skip />
+ <!-- no translation found for permdesc_sdcardWrite (4337417790936632090) -->
+ <skip />
<!-- no translation found for permlab_mediaStorageWrite (6859839199706879015) -->
<skip />
<!-- no translation found for permdesc_mediaStorageWrite (8189160597698529185) -->
<skip />
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"access al sistem da datotecas da cache"</string>
- <!-- outdated translation 1624734528435659906 --> <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Permetta ad ina applicaziun da leger e da scriver en il sistem da datotecas dal cache."</string>
+ <!-- no translation found for permdesc_cache_filesystem (5578967642265550955) -->
+ <skip />
<!-- no translation found for permlab_use_sip (5986952362795870502) -->
<skip />
<!-- no translation found for permdesc_use_sip (4717632000062674294) -->
@@ -548,33 +783,44 @@
<skip />
<!-- no translation found for permlab_modifyNetworkAccounting (5088217309088729650) -->
<skip />
- <!-- no translation found for permdesc_modifyNetworkAccounting (8553240749784321765) -->
+ <!-- no translation found for permdesc_modifyNetworkAccounting (5443412866746198123) -->
<skip />
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Limitar il pled-clav"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Restrenscher ils tips da pleds-clav che Vus pudais utilisar."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Survegliar las emprovas da s\'annunziar"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Survegliar las emprovas betg reussidas da s\'annunziar ad in apparat periferic / dad exequir ina acziun."</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Survegliar las emprovas betg reussidas da s\'annunziar ad in apparat periferic / dad exequir ina acziun."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Reinizialisar il pled-clav"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"\"Definir ina nova valur per Voss pled-clav, uschia che l\'administratur As sto dar il pled-clav avant che Vus pudais s\'annunziar.\""</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Sfurzar da bloccar"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Controlla da la bloccaziun dad apparats periferics cun l\'obligaziun dad endatar danovamain il pled-clav."</string>
+ <!-- no translation found for policylab_limitPassword (4497420728857585791) -->
+ <skip />
+ <!-- no translation found for policydesc_limitPassword (3252114203919510394) -->
+ <skip />
+ <!-- no translation found for policylab_watchLogin (914130646942199503) -->
+ <skip />
+ <!-- no translation found for policydesc_watchLogin (3215729294215070072) -->
+ <skip />
+ <!-- no translation found for policydesc_watchLogin (5712323091846761073) -->
+ <skip />
+ <!-- no translation found for policylab_resetPassword (2620077191242688955) -->
+ <skip />
+ <!-- no translation found for policydesc_resetPassword (605963962301904458) -->
+ <skip />
+ <!-- no translation found for policylab_forceLock (2274085384704248431) -->
+ <skip />
+ <!-- no translation found for policydesc_forceLock (1141797588403827138) -->
+ <skip />
<string name="policylab_wipeData" msgid="3910545446758639713">"Stizzar tut las datas"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" product="tablet" msgid="314455232799486222">"Restaurar ils parameters originals dal telefonin. Qua tras vegnan tut Vossas datas stizzadas senza dumonda da conferma."</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"Restaurar ils parameters originals dal telefonin. Qua tras vegnan tut Vossas datas stizzadas senza dumonda da conferma."</string>
+ <!-- no translation found for policydesc_wipeData (4306184096067756876) -->
+ <skip />
+ <!-- no translation found for policydesc_wipeData (5096895604574188391) -->
+ <skip />
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Definir il proxy global da l\'apparat"</string>
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Definir il proxy global da l\'apparat che duai vegnir utilisà sche la directiva è activada. Mo l\'emprim administratur dad apparats definescha il vair proxy global."</string>
<!-- no translation found for policylab_expirePassword (885279151847254056) -->
<skip />
- <!-- no translation found for policydesc_expirePassword (4844430354224822074) -->
+ <!-- no translation found for policydesc_expirePassword (1729725226314691591) -->
<skip />
<!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
<skip />
- <!-- no translation found for policydesc_encryptedStorage (8877192718681120469) -->
+ <!-- no translation found for policydesc_encryptedStorage (2637732115325316992) -->
<skip />
<!-- no translation found for policylab_disableCamera (6395301023152297826) -->
<skip />
- <!-- no translation found for policydesc_disableCamera (5680054212889413366) -->
+ <!-- no translation found for policydesc_disableCamera (2306349042834754597) -->
<skip />
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Privat"</item>
@@ -644,7 +890,8 @@
<skip />
<string name="eventTypeBirthday" msgid="2813379844211390740">"Anniversari"</string>
<string name="eventTypeAnniversary" msgid="3876779744518284000">"Anniversari"</string>
- <!-- outdated translation 5834288791948564594 --> <string name="eventTypeOther" msgid="7388178939010143077">"Termin"</string>
+ <!-- no translation found for eventTypeOther (7388178939010143077) -->
+ <skip />
<string name="emailTypeCustom" msgid="8525960257804213846">"Persunalisà"</string>
<string name="emailTypeHome" msgid="449227236140433919">"Privat"</string>
<string name="emailTypeWork" msgid="3548058059601149973">"Lavur"</string>
@@ -709,7 +956,8 @@
<skip />
<!-- no translation found for sipAddressTypeOther (4408436162950119849) -->
<skip />
- <!-- outdated translation 3731488827218876115 --> <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Endatar il code PIN"</string>
+ <!-- no translation found for keyguard_password_enter_pin_code (3037685796058495017) -->
+ <skip />
<!-- no translation found for keyguard_password_enter_puk_code (4800725266925845333) -->
<skip />
<!-- no translation found for keyguard_password_enter_puk_prompt (1341112146710087048) -->
@@ -718,12 +966,16 @@
<skip />
<!-- no translation found for keyguard_password_entry_touch_hint (7858547464982981384) -->
<skip />
- <!-- outdated translation 9138158344813213754 --> <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Endatai il pled-clav per debloccar."</string>
- <!-- outdated translation 638347075625491514 --> <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Endatar il PIN per debloccar"</string>
- <string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Code PIN nuncorrect!"</string>
+ <!-- no translation found for keyguard_password_enter_password_code (1054721668279049780) -->
+ <skip />
+ <!-- no translation found for keyguard_password_enter_pin_password_code (6391755146112503443) -->
+ <skip />
+ <!-- no translation found for keyguard_password_wrong_pin_code (2422225591006134936) -->
+ <skip />
<string name="keyguard_label_text" msgid="861796461028298424">"Smatgai per debloccar sin la tasta Menu e lura sin 0."</string>
<string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Numer d\'urgenza"</string>
- <!-- outdated translation 8812714795156374435 --> <string name="lockscreen_carrier_default" msgid="8963839242565653192">"(nagin servetsch)"</string>
+ <!-- no translation found for lockscreen_carrier_default (8963839242565653192) -->
+ <skip />
<string name="lockscreen_screen_locked" msgid="7288443074806832904">"Visur bloccà."</string>
<string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Smatgai la tasta Menu per debloccar il telefonin u telefonar sin in numer d\'urgenza."</string>
<string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Smatgar la tasta da menu per debloccar."</string>
@@ -731,17 +983,23 @@
<string name="lockscreen_emergency_call" msgid="5347633784401285225">"Numer d\'urgenza"</string>
<string name="lockscreen_return_to_call" msgid="5244259785500040021">"Enavos al clom"</string>
<string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Correct!"</string>
- <!-- outdated translation 4817583279053112312 --> <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Quai ans displascha. Empruvai anc ina giada."</string>
- <!-- outdated translation 6237443657358168819 --> <string name="lockscreen_password_wrong" msgid="5737815393253165301">"\"Perstgisai, empruvai anc ina giada.\""</string>
+ <!-- no translation found for lockscreen_pattern_wrong (4317955014948108794) -->
+ <skip />
+ <!-- no translation found for lockscreen_password_wrong (5737815393253165301) -->
+ <skip />
+ <!-- no translation found for faceunlock_multiple_failures (754137583022792429) -->
+ <skip />
<!-- no translation found for lockscreen_plugged_in (8057762828355572315) -->
<skip />
<string name="lockscreen_charged" msgid="4938930459620989972">"Chargià"</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_low_battery" msgid="1482873981919249740">"Connectai Voss chargiader."</string>
<string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Nagina carta SIM."</string>
- <!-- outdated translation 2186920585695169078 --> <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"En il telefon na sa chatta nagina carta SIM."</string>
+ <!-- no translation found for lockscreen_missing_sim_message (151659196095791474) -->
+ <skip />
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"En il telefon na sa chatta nagina carta SIM."</string>
- <!-- outdated translation 8874620818937719067 --> <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Inseri per plaschair ina carta SIM."</string>
+ <!-- no translation found for lockscreen_missing_sim_instructions (5372787138023272615) -->
+ <skip />
<!-- no translation found for lockscreen_missing_sim_instructions_long (3526573099019319472) -->
<skip />
<!-- no translation found for lockscreen_permanent_disabled_sim_instructions (910904643433151371) -->
@@ -760,7 +1018,8 @@
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rait bloccada"</string>
<!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
<skip />
- <!-- outdated translation 635967534992394321 --> <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Ulteriuras infurmaziuns chattais Vus en il manual u che Vus pudais contactar il servetsch da clientella."</string>
+ <!-- no translation found for lockscreen_sim_puk_locked_instructions (8127916255245181063) -->
+ <skip />
<string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"La carta SIM è bloccada."</string>
<string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Debloccar la carta SIM..."</string>
<!-- no translation found for lockscreen_too_many_failed_attempts_dialog_message (6481623830344107222) -->
@@ -784,15 +1043,18 @@
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Empruvar anc ina giada en <xliff:g id="NUMBER">%d</xliff:g> secundas."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Emblidà il schema?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Debloccaziun dal conto"</string>
- <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"Memia bleras tentativas!"</string>
- <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"S\'annunziai cun Voss conto Google per debloccar il telefonin."</string>
+ <!-- no translation found for lockscreen_glogin_too_many_attempts (2751368605287288808) -->
+ <skip />
+ <!-- no translation found for lockscreen_glogin_instructions (3931816256100707784) -->
+ <skip />
<string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Num d\'utilisader (e-mail)"</string>
<string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Pled-clav"</string>
<string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"S\'annunziar"</string>
<string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Num d\'utilisader u pled-clav nunvalid."</string>
- <!-- no translation found for lockscreen_glogin_account_recovery_hint (8253152905532900548) -->
+ <!-- no translation found for lockscreen_glogin_account_recovery_hint (1696924763690379073) -->
<skip />
- <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Verifitgar..."</string>
+ <!-- no translation found for lockscreen_glogin_checking_password (7114627351286933867) -->
+ <skip />
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Debloccar"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Tun activà"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Tun deactivà"</string>
@@ -813,15 +1075,17 @@
<string name="factorytest_not_system" msgid="4435201656767276723">"L\'acziun FACTORY_TEST vegn mo sustegnida per pachets installads en /system/app."</string>
<string name="factorytest_no_action" msgid="872991874799998561">"Betg chattà in pachet che porscha l\'acziun FACTORY_TEST."</string>
<string name="factorytest_reboot" msgid="6320168203050791643">"Reaviar il sistem"</string>
- <string name="js_dialog_title" msgid="8143918455087008109">"La pagina \'<xliff:g id="TITLE">%s</xliff:g>\' annunzia:"</string>
+ <!-- no translation found for js_dialog_title (1987483977834603872) -->
+ <skip />
<string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
<!-- no translation found for js_dialog_before_unload (730366588032430474) -->
<skip />
<string name="save_password_label" msgid="6860261758665825069">"Confermar"</string>
- <!-- outdated translation 1068216937244567247 --> <string name="double_tap_toast" msgid="2729045387923870404">"Tip: Smatgar duas giadas per zoomar pli datiers u zoomar pli lontan."</string>
- <!-- no translation found for autofill_this_form (1272247532604569872) -->
+ <!-- no translation found for double_tap_toast (4595046515400268881) -->
<skip />
- <!-- no translation found for setup_autofill (8154593408885654044) -->
+ <!-- no translation found for autofill_this_form (4616758841157816676) -->
+ <skip />
+ <!-- no translation found for setup_autofill (7103495070180590814) -->
<skip />
<!-- no translation found for autofill_address_name_separator (2504700673286691795) -->
<skip />
@@ -856,10 +1120,13 @@
<!-- no translation found for autofill_emirate (2893880978835698818) -->
<skip />
<string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"leger la cronologia ed ils segnapaginas dal navigatur"</string>
- <!-- outdated translation 4981489815467617191 --> <string name="permdesc_readHistoryBookmarks" msgid="4577476392604595921">"\"Permetta a l\'applicaziun da leger tut las URLs visitadas, sco era ils segnapaginas dal navigatur.\""</string>
+ <!-- no translation found for permdesc_readHistoryBookmarks (4577476392604595921) -->
+ <skip />
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"scriver en la cronologia ed en ils segnapaginas dal navigatur"</string>
- <!-- outdated translation 945571990357114950 --> <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="1757103804824209530">"\"Permetta ad ina applicaziun da modifitgar la cronologia u ils segnapaginas dal navigatur, memorisads sin Voss telefonin. Applicaziuns donnegiusas pon uschia stizzar u modifitgar las datas da Voss navigatur.\""</string>
- <!-- outdated translation 945571990357114950 --> <string name="permdesc_writeHistoryBookmarks" product="default" msgid="6693764355720719197">"\"Permetta ad ina applicaziun da modifitgar la cronologia u ils segnapaginas dal navigatur, memorisads sin Voss telefonin. Applicaziuns donnegiusas pon uschia stizzar u modifitgar las datas da Voss navigatur.\""</string>
+ <!-- no translation found for permdesc_writeHistoryBookmarks (1757103804824209530) -->
+ <skip />
+ <!-- no translation found for permdesc_writeHistoryBookmarks (6693764355720719197) -->
+ <skip />
<!-- no translation found for permlab_setAlarm (5924401328803615165) -->
<skip />
<!-- no translation found for permdesc_setAlarm (316392039157473848) -->
@@ -868,8 +1135,10 @@
<skip />
<!-- no translation found for permdesc_addVoicemail (6604508651428252437) -->
<skip />
- <!-- outdated translation 4715212655598275532 --> <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Modifitgar las autorisaziuns da geolocalisaziun dal navigatur"</string>
- <!-- outdated translation 4011908282980861679 --> <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Permetta ad ina applicaziun da modifitgar las permissiuns da geolocalisaziun dal navigatur. Applicaziuns donnegiusas pon utilisar questa funcziun per trametter datas da posiziun a websites arbitraras."</string>
+ <!-- no translation found for permlab_writeGeolocationPermissions (5962224158955273932) -->
+ <skip />
+ <!-- no translation found for permdesc_writeGeolocationPermissions (1083743234522638747) -->
+ <skip />
<!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
<skip />
<!-- no translation found for permdesc_packageVerificationAgent (8437590190990843381) -->
@@ -882,7 +1151,8 @@
<string name="save_password_notnow" msgid="6389675316706699758">"Betg ussa"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Memorisar"</string>
<string name="save_password_never" msgid="8274330296785855105">"Mai"</string>
- <!-- outdated translation 5661861460947222274 --> <string name="open_permission_deny" msgid="7374036708316629800">"Vus n\'avais betg las permissiuns necessarias per avrir questa pagina."</string>
+ <!-- no translation found for open_permission_deny (7374036708316629800) -->
+ <skip />
<string name="text_copied" msgid="4985729524670131385">"Il text è vegnì copià en l\'archiv provisoric."</string>
<string name="more_item_label" msgid="4650918923083320495">"Dapli"</string>
<string name="prepend_shortcut_label" msgid="2572214461676015642">"Menu+"</string>
@@ -986,9 +1256,12 @@
<string name="weeks" msgid="6509623834583944518">"emnas"</string>
<string name="year" msgid="4001118221013892076">"onn"</string>
<string name="years" msgid="6881577717993213522">"onns"</string>
- <!-- outdated translation 3359437293118172396 --> <string name="VideoView_error_title" msgid="5927895235831021723">"Betg reussì da reproducir il video."</string>
- <!-- outdated translation 897920883624437033 --> <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"\"Perstgisai, deplorablamain n\'è quest video betg valid per il streaming sin quest apparat.\""</string>
- <!-- outdated translation 710301040038083944 --> <string name="VideoView_error_text_unknown" msgid="4309847331399592194">"\"Perstgisai, impussibel da leger quest video.\""</string>
+ <!-- no translation found for VideoView_error_title (3534509135438353077) -->
+ <skip />
+ <!-- no translation found for VideoView_error_text_invalid_progressive_playback (3186670335938670444) -->
+ <skip />
+ <!-- no translation found for VideoView_error_text_unknown (3450439155187810085) -->
+ <skip />
<string name="VideoView_error_button" msgid="2822238215100679592">"OK"</string>
<string name="relative_time" msgid="1818557177829411417">"\"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>\""</string>
<string name="noon" msgid="7245353528818587908">"mezdi"</string>
@@ -1006,10 +1279,9 @@
<!-- no translation found for delete (6098684844021697789) -->
<skip />
<string name="copyUrl" msgid="2538211579596067402">"Copiar l\'URL"</string>
- <!-- outdated translation 6738556348861347240 --> <string name="selectTextMode" msgid="1018691815143165326">"Selecziunar text…"</string>
- <string name="textSelectionCABTitle" msgid="5236850394370820357">"Selecziun da text"</string>
- <!-- unknown placeholder WORD in addToDictionary -->
+ <!-- no translation found for selectTextMode (1018691815143165326) -->
<skip />
+ <string name="textSelectionCABTitle" msgid="5236850394370820357">"Selecziun da text"</string>
<!-- no translation found for addToDictionary (9090375111134433012) -->
<skip />
<!-- no translation found for deleteText (7070985395199629156) -->
@@ -1017,23 +1289,28 @@
<string name="inputMethod" msgid="1653630062304567879">"Metoda d\'endataziun"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acziuns da text"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Pauca capacitad da memorisar"</string>
- <!-- outdated translation 635106544616378836 --> <string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">"Mo pli pauca capacitad da memorisar."</string>
+ <!-- no translation found for low_internal_storage_view_text (4231085657068852042) -->
+ <skip />
<string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"Mo pli pauca capacitad da memorisar."</string>
<string name="ok" msgid="5970060430562524910">"OK"</string>
<string name="cancel" msgid="6442560571259935130">"Interrumper"</string>
<string name="yes" msgid="5362982303337969312">"OK"</string>
<string name="no" msgid="5141531044935541497">"Interrumper"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"Attenziun"</string>
- <!-- outdated translation 1760724998928255250 --> <string name="loading" msgid="7933681260296021180">"Chargiar…"</string>
+ <!-- no translation found for loading (7933681260296021180) -->
+ <skip />
<string name="capital_on" msgid="1544682755514494298">"ACTIVÀ"</string>
<string name="capital_off" msgid="6815870386972805832">"DEACTIVÀ"</string>
<string name="whichApplication" msgid="4533185947064773386">"Cumplettar l\'acziun cun"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Utilisar questa applicaziun sco standard per questa acziun."</string>
- <!-- outdated translation 4815455344600932173 --> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Stizzar ils parameters da standard en Parameters da la pagina da partenza > Applicaziuns > Administrar las applicaziuns."</string>
- <string name="chooseActivity" msgid="1009246475582238425">"Tscherner ina acziun"</string>
+ <!-- no translation found for clearDefaultHintMsg (3252584689512077257) -->
+ <skip />
+ <!-- no translation found for chooseActivity (7486876147751803333) -->
+ <skip />
<!-- no translation found for chooseUsbActivity (6894748416073583509) -->
<skip />
- <!-- outdated translation 1691104391758345586 --> <string name="noApplications" msgid="2991814273936504689">"Nagina applicaziun po exequir questa acziun."</string>
+ <!-- no translation found for noApplications (2991814273936504689) -->
+ <skip />
<string name="aerr_title" msgid="1905800560317137752"></string>
<!-- no translation found for aerr_application (932628488013092776) -->
<skip />
@@ -1048,9 +1325,12 @@
<skip />
<!-- no translation found for anr_process (6513209874880517125) -->
<skip />
- <!-- outdated translation 3653416315450806396 --> <string name="force_close" msgid="8346072094521265605">"Sfurzar da serrar"</string>
+ <!-- no translation found for force_close (8346072094521265605) -->
+ <skip />
<string name="report" msgid="4060218260984795706">"Rapport"</string>
<string name="wait" msgid="7147118217226317732">"Spetgar"</string>
+ <!-- no translation found for webpage_unresponsive (3272758351138122503) -->
+ <skip />
<!-- no translation found for launch_warning_title (1547997780506713581) -->
<skip />
<!-- no translation found for launch_warning_replace (6202498949970281412) -->
@@ -1075,18 +1355,25 @@
<!-- no translation found for android_upgrading_complete (1405954754112999229) -->
<skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> vegn exequida"</string>
- <!-- outdated translation 2423977499339403402 --> <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Tscherner per midar a l\'applicaziun"</string>
- <!-- outdated translation 1135403633766694316 --> <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Midar dad ina applicaziun a l\'autra?"</string>
- <!-- outdated translation 4592075610079319667 --> <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"Ina autra applicaziun vegn gia exequida e sto vegnir serrada avant ch\'ina nova po vegnir aviada."</string>
+ <!-- no translation found for heavy_weight_notification_detail (1721681741617898865) -->
+ <skip />
+ <!-- no translation found for heavy_weight_switcher_title (7153167085403298169) -->
+ <skip />
+ <!-- no translation found for heavy_weight_switcher_text (7022631924534406403) -->
+ <skip />
<string name="old_app_action" msgid="493129172238566282">"Turnar a <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
- <!-- outdated translation 942967900237208466 --> <string name="old_app_description" msgid="2082094275580358049">"Betg aviai la nova applicaziun."</string>
+ <!-- no translation found for old_app_description (2082094275580358049) -->
+ <skip />
<string name="new_app_action" msgid="5472756926945440706">"Aviar <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
- <!-- outdated translation 6830398339826789493 --> <string name="new_app_description" msgid="1932143598371537340">"Fermai l\'applicaziun veglia senza memorisar."</string>
- <string name="sendText" msgid="5132506121645618310">"Tscherner ina acziun per il text"</string>
+ <!-- no translation found for new_app_description (1932143598371537340) -->
+ <skip />
+ <!-- no translation found for sendText (5209874571959469142) -->
+ <skip />
<string name="volume_ringtone" msgid="6885421406845734650">"Volumen dal tun da scalin"</string>
<string name="volume_music" msgid="5421651157138628171">"Volumen da medias"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Reproducir tras bluetooth"</string>
- <string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"Tschernì il modus silenzius per il tun da scalin"</string>
+ <!-- no translation found for volume_music_hint_silent_ringtone_selected (8310739960973156272) -->
+ <skip />
<string name="volume_call" msgid="3941680041282788711">"Volumen dals cloms entrants"</string>
<string name="volume_bluetooth_call" msgid="2002891926351151534">"Volumen da cloms entrants da bluetooth"</string>
<string name="volume_alarm" msgid="1985191616042689100">"Volumen dal svegliarin"</string>
@@ -1115,34 +1402,46 @@
<item quantity="one" msgid="1634101450343277345">"Rait WLAN averta disponibla"</item>
<item quantity="other" msgid="7915895323644292768">"Raits WLAN avertas disponiblas"</item>
</plurals>
- <!-- no translation found for wifi_available_sign_in (9157196203958866662) -->
+ <!-- no translation found for wifi_available_sign_in (4029489716605255386) -->
<skip />
<!-- no translation found for wifi_available_sign_in_detailed (6797764740339907572) -->
<skip />
<!-- no translation found for wifi_watchdog_network_disabled (7904214231651546347) -->
<skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4917472096696322767) -->
+ <!-- no translation found for wifi_watchdog_network_disabled_detailed (5548780776418332675) -->
<skip />
<!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
<skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
+ <!-- no translation found for wifi_p2p_turnon_message (2909250942299627244) -->
<skip />
- <!-- no translation found for wifi_p2p_failed_message (1820097493844848281) -->
+ <!-- no translation found for wifi_p2p_failed_message (3763669677935623084) -->
<skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
+ <!-- no translation found for accept (1645267259272829559) -->
<skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
+ <!-- no translation found for decline (2112225451706137894) -->
<skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
+ <!-- no translation found for wifi_p2p_invitation_sent_title (1318975185112070734) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_invitation_to_connect_title (4958803948658533637) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_from_message (570389174731951769) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_to_message (248968974522044099) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_enter_pin_message (5920929550367828970) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_show_pin_message (8530563323880921094) -->
<skip />
<!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
<skip />
<!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
<skip />
<string name="select_character" msgid="3365550120617701745">"Inserir in caracter"</string>
- <!-- outdated translation 7630529934366549163 --> <string name="sms_control_default_app_name" msgid="3058577482636640465">"Applicaziun nunenconuschenta"</string>
+ <!-- no translation found for sms_control_default_app_name (3058577482636640465) -->
+ <skip />
<string name="sms_control_title" msgid="7296612781128917719">"Trametter messadis SMS"</string>
- <!-- outdated translation 1289331457999236205 --> <string name="sms_control_message" msgid="4073755190243093924">"Vulais Vus trametter in grond dumber da messadis SMS? Tschernì OK per cuntinuar u Interrumper per annullar la spediziun."</string>
+ <!-- no translation found for sms_control_message (4073755190243093924) -->
+ <skip />
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Interrumper"</string>
<!-- no translation found for sim_removed_title (6227712319223226185) -->
@@ -1153,7 +1452,7 @@
<skip />
<!-- no translation found for sim_added_title (3719670512889674693) -->
<skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
+ <!-- no translation found for sim_added_message (6599945301141050216) -->
<skip />
<!-- no translation found for sim_restart_button (4722407842815232347) -->
<skip />
@@ -1166,25 +1465,37 @@
<string name="no_permissions" msgid="7283357728219338112">"Naginas permissiuns obligatoricas"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Zuppentar"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mussar tut"</b></string>
- <string name="usb_storage_activity_title" msgid="2399289999608900443">"Memoria da massa USB"</string>
+ <!-- no translation found for usb_storage_activity_title (4465055157209648641) -->
+ <skip />
<string name="usb_storage_title" msgid="5901459041398751495">"Connectà cun agid d\'in cabel USB"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"\"Vus avais connectà Voss telefonin cun Voss computer cun agid dad in cabel USB. Tscherni il buttun sutvart per copiar datotecas da Voss computer sin la carta SD da Voss Android, u viceversa.\""</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="default" msgid="4510858346516069238">"\"Vus avais connectà Voss telefonin cun Voss computer cun agid dad in cabel USB. Tscherni il buttun sutvart per copiar datotecas da Voss computer sin la carta SD da Voss Android, u viceversa.\""</string>
+ <!-- no translation found for usb_storage_message (3308538094316477839) -->
+ <skip />
+ <!-- no translation found for usb_storage_message (805351000446037811) -->
+ <skip />
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Activar la memoria USB"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Cun l\'utilisaziun da Vossa carta SD sco memoria USB è cumparì in problem."</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Cun l\'utilisaziun da Vossa carta SD sco memoria USB è cumparì in problem."</string>
+ <!-- no translation found for usb_storage_error_message (3017045217365540658) -->
+ <skip />
+ <!-- no translation found for usb_storage_error_message (2876018512716970313) -->
+ <skip />
<string name="usb_storage_notification_title" msgid="8175892554757216525">"Connectà cun in cabel USB"</string>
- <string name="usb_storage_notification_message" msgid="7380082404288219341">"Tscherni las datotecas che duain vegnir copiadas da/sin Voss computer."</string>
+ <!-- no translation found for usb_storage_notification_message (939822783828183763) -->
+ <skip />
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Deactivar la memoria USB"</string>
- <string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Tscherner per deactivar la memoria USB."</string>
+ <!-- no translation found for usb_storage_stop_notification_message (1656852098555623822) -->
+ <skip />
<string name="usb_storage_stop_title" msgid="660129851708775853">"La memoria USB vegn gest utilisada"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Verifitgai avant che deactivar la memoria USB che Vus avais demontà la carta SD Android da Voss computer."</string>
- <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Verifitgai avant che deactivar la memoria USB che Vus avais demontà la carta SD Android da Voss computer."</string>
+ <!-- no translation found for usb_storage_stop_message (4264025280777219521) -->
+ <skip />
+ <!-- no translation found for usb_storage_stop_message (8043969782460613114) -->
+ <skip />
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Deactivar l\'apparat periferic da memoria USB"</string>
- <string name="usb_storage_stop_error_message" msgid="143881914840412108">"Cun deactivar la memoria USB è in problem cumparì. Verifitgai che Vus avais demontà il host USB ed empruvai anc ina giada."</string>
+ <!-- no translation found for usb_storage_stop_error_message (1970374898263063836) -->
+ <skip />
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Activar la memoria USB"</string>
- <!-- outdated translation 3202838234780505886 --> <string name="dlg_confirm_kill_storage_users_text" msgid="6206212680430268343">"Sche Vus activais l\'apparat periferic da memoria USB sa ferman tschertas applicaziuns che Vus utilisais. Ellas n\'èn probablamain betg disponiblas enfin che l\'apparat periferic vegn puspè deactivà."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Operaziun USB betg reussida"</string>
+ <!-- no translation found for dlg_confirm_kill_storage_users_text (5100428757107469454) -->
+ <skip />
+ <!-- no translation found for dlg_error_title (7323658469626514207) -->
+ <skip />
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
<skip />
@@ -1194,51 +1505,76 @@
<skip />
<!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
<skip />
- <!-- no translation found for usb_notification_message (4447869605109736382) -->
+ <!-- no translation found for usb_notification_message (2290859399983720271) -->
<skip />
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formatar la carta SD"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formatar la carta SD"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Vulais Vus propi formatar la carta SD? En quest cas van tut las datas sin Vossa carta a perder."</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Vulais Vus propi formatar la carta SD? En quest cas van tut las datas sin Vossa carta a perder."</string>
+ <!-- no translation found for extmedia_format_title (9020092196061007262) -->
+ <skip />
+ <!-- no translation found for extmedia_format_title (3648415921526526069) -->
+ <skip />
+ <!-- no translation found for extmedia_format_message (3934016853425761078) -->
+ <skip />
+ <!-- no translation found for extmedia_format_message (14131895027543830) -->
+ <skip />
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Debugging USB connectà"</string>
- <!-- outdated translation 8470296818270110396 --> <string name="adb_active_notification_message" msgid="1016654627626476142">"Tscherner per deactivar il debugging USB."</string>
- <!-- outdated translation 6865512749462072765 --> <string name="select_input_method" msgid="4653387336791222978">"Tscherner ina metoda d\'endataziun"</string>
+ <!-- no translation found for adb_active_notification_message (1016654627626476142) -->
+ <skip />
+ <!-- no translation found for select_input_method (4653387336791222978) -->
+ <skip />
<!-- no translation found for configure_input_methods (9091652157722495116) -->
<skip />
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidats"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Preparaziun da la carta SD"</string>
+ <!-- no translation found for ext_media_checking_notification_title (3449816005351468560) -->
+ <skip />
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Preparaziun da la carta SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Tschertgar errurs"</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Carta SD vida"</string>
+ <!-- no translation found for ext_media_nofs_notification_title (7788040745686229307) -->
+ <skip />
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Carta SD vida"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"La carta SD è vida u ch\'ella utilisescha in sistem da datotecas che na vegn betg sustegnì."</string>
- <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"La carta SD è vida ubain che ses sistem da datotecas na vegn betg sustegnì."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Carta SD donnegiada"</string>
+ <!-- no translation found for ext_media_nofs_notification_message (7840121067427269500) -->
+ <skip />
+ <!-- no translation found for ext_media_nofs_notification_message (8641065641786923604) -->
+ <skip />
+ <!-- no translation found for ext_media_unmountable_notification_title (2090046769532713563) -->
+ <skip />
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Carta SD donnegiada"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"La carta SD è donnegiada. Vus stuais eventualmain reformatar Vossa carta."</string>
- <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"La carta SD è donnegiada. Vus stuais eventualmain reformatar la carta."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Allontanà la carta SD nunspetgadamain"</string>
+ <!-- no translation found for ext_media_unmountable_notification_message (1795917578395333280) -->
+ <skip />
+ <!-- no translation found for ext_media_unmountable_notification_message (1753898567525568253) -->
+ <skip />
+ <!-- no translation found for ext_media_badremoval_notification_title (1661683031330951073) -->
+ <skip />
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Allontanà la carta SD nunspetgadamain"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Demontar la carta SD avant che retrair ella per evitar ina sperdita da datas."</string>
+ <!-- no translation found for ext_media_badremoval_notification_message (4329848819865594241) -->
+ <skip />
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Demontar la carta SD avant che retrair ella per evitar ina sperdita da datas."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"La carta SD po vegnir allontanada a moda segira"</string>
+ <!-- no translation found for ext_media_safe_unmount_notification_title (3967973893270360230) -->
+ <skip />
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"La carta SD po vegnir allontanada a moda segira"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"La carta SD po ussa vegnir allontanada."</string>
+ <!-- no translation found for ext_media_safe_unmount_notification_message (6142195361606493530) -->
+ <skip />
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"La carta SD po vegnir retratga a moda segira."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Allontanà la carta SD"</string>
+ <!-- no translation found for ext_media_nomedia_notification_title (4486377230140227651) -->
+ <skip />
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Allontanà la carta SD"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"La carta SD è vegnida allontanada. Inseri ina carta SD nova per engrondir la capacitad da memorisar da Voss apparat."</string>
+ <!-- no translation found for ext_media_nomedia_notification_message (6921126162580574143) -->
+ <skip />
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Allontanà la carta SD. Inseri ina nova."</string>
- <string name="activity_list_empty" msgid="4168820609403385789">"Betg chattà activitads correspundentas"</string>
+ <!-- no translation found for activity_list_empty (1675388330786841066) -->
+ <skip />
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"actualisar las datas statisticas da la cumponenta"</string>
- <!-- outdated translation 891553695716752835 --> <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"Permetta da modifitgar las datas statisticas rimnadas da la cumponenta. Betg previs per applicaziuns normalas."</string>
- <!-- outdated translation 1660908117394854464 --> <string name="permlab_copyProtectedData" msgid="4341036311211406692">"Permetta da clamar il servetsch da container predefinì per copiar il cuntegn. Betg previs per applicaziuns normalas."</string>
- <!-- outdated translation 537780957633976401 --> <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Permetta da clamar il servetsch da container predefinì per copiar il cuntegn. Betg previs per applicaziuns normalas."</string>
- <!-- outdated translation 1311810005957319690 --> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Tutgar duas giadas per reglar il zoom"</string>
- <string name="gadget_host_error_inflating" msgid="2613287218853846830">"Errur cun engrondir il widget"</string>
+ <!-- no translation found for permdesc_pkgUsageStats (1106612424254277630) -->
+ <skip />
+ <!-- no translation found for permlab_copyProtectedData (4341036311211406692) -->
+ <skip />
+ <!-- no translation found for permdesc_copyProtectedData (4390697124288317831) -->
+ <skip />
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4070433208160063538) -->
+ <skip />
+ <!-- no translation found for gadget_host_error_inflating (4882004314906466162) -->
+ <skip />
<string name="ime_action_go" msgid="8320845651737369027">"Dai"</string>
<string name="ime_action_search" msgid="658110271822807811">"Tschertgar"</string>
<string name="ime_action_send" msgid="2316166556349314424">"Trametter"</string>
@@ -1249,41 +1585,49 @@
<string name="ime_action_default" msgid="2840921885558045721">"Exequir"</string>
<string name="dial_number_using" msgid="5789176425167573586">"Cumponer il numer"\n"cun utilisar <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="create_contact_using" msgid="4947405226788104538">"Agiuntar in contact"\n"cun il numer <xliff:g id="NUMBER">%s</xliff:g>"</string>
- <!-- outdated translation 6824538733852821001 --> <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Las suandantas applicaziuns dumondan l\'autorisaziun dad acceder a partir dad ussa a Voss conto."</string>
+ <!-- no translation found for grant_credentials_permission_message_header (2106103817937859662) -->
+ <skip />
<string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Vulais Vus autorisar questa dumonda?"</string>
- <string name="grant_permissions_header_text" msgid="2722567482180797717">"Dumonda d\'access"</string>
+ <!-- no translation found for grant_permissions_header_text (6874497408201826708) -->
+ <skip />
<string name="allow" msgid="7225948811296386551">"Permetter"</string>
<string name="deny" msgid="2081879885755434506">"Refusar"</string>
- <string name="permission_request_notification_title" msgid="5390555465778213840">"Autorisaziun dumandada"</string>
- <string name="permission_request_notification_with_subtitle" msgid="4325409589686688000">"Autorisaziun dumandada"\n"per il conto <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <!-- no translation found for permission_request_notification_title (6486759795926237907) -->
+ <skip />
+ <!-- no translation found for permission_request_notification_with_subtitle (8530393139639560189) -->
+ <skip />
<string name="input_method_binding_label" msgid="1283557179944992649">"Metoda d\'endataziun"</string>
<string name="sync_binding_label" msgid="3687969138375092423">"Sincronisar"</string>
<string name="accessibility_binding_label" msgid="4148120742096474641">"Agids d\'access"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"Fund davos"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"Midar il fund davos"</string>
- <!-- no translation found for vpn_title (8219003246858087489) -->
+ <!-- no translation found for vpn_title (19615213552042827) -->
<skip />
<!-- no translation found for vpn_title_long (6400714798049252294) -->
<skip />
- <!-- no translation found for vpn_text (1610714069627824309) -->
+ <!-- no translation found for vpn_text (3011306607126450322) -->
<skip />
- <!-- no translation found for vpn_text_long (4907843483284977618) -->
+ <!-- no translation found for vpn_text_long (6407351006249174473) -->
<skip />
<string name="upload_file" msgid="2897957172366730416">"Tscherner ina datoteca"</string>
<string name="no_file_chosen" msgid="6363648562170759465">"Nagina datoteca tschernida"</string>
<string name="reset" msgid="2448168080964209908">"Reinizialisar"</string>
<string name="submit" msgid="1602335572089911941">"Trametter"</string>
<string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Modus dad auto activà"</string>
- <string name="car_mode_disable_notification_message" msgid="668663626721675614">"Tscherner per serrar il modus dad auto."</string>
+ <!-- no translation found for car_mode_disable_notification_message (8035230537563503262) -->
+ <skip />
<string name="tethered_notification_title" msgid="3146694234398202601">"Tethering u hotspot activ"</string>
- <string name="tethered_notification_message" msgid="3067108323903048927">"Tutgar per configurar"</string>
+ <!-- no translation found for tethered_notification_message (6857031760103062982) -->
+ <skip />
<string name="back_button_label" msgid="2300470004503343439">"Enavos"</string>
<string name="next_button_label" msgid="1080555104677992408">"Vinavant"</string>
<string name="skip_button_label" msgid="1275362299471631819">"Sursiglir"</string>
<string name="throttle_warning_notification_title" msgid="4890894267454867276">"Grond diever da datas mobilas"</string>
- <string name="throttle_warning_notification_message" msgid="2609734763845705708">"Tutgar per vegnir a savair dapli davart l\'utilisaziun da datas mobilas"</string>
+ <!-- no translation found for throttle_warning_notification_message (3340822228599337743) -->
+ <skip />
<string name="throttled_notification_title" msgid="6269541897729781332">"Surpassà la limita da datas mobilas"</string>
- <string name="throttled_notification_message" msgid="4712369856601275146">"Tutgar per vegnir a savair dapli davart l\'utilisaziun da datas mobilas"</string>
+ <!-- no translation found for throttled_notification_message (5443457321354907181) -->
+ <skip />
<!-- no translation found for no_matches (8129421908915840737) -->
<skip />
<!-- no translation found for find_on_page (1946799233822820384) -->
@@ -1292,13 +1636,13 @@
<!-- no translation found for matches_found:other (4641872797067609177) -->
<!-- no translation found for action_mode_done (7217581640461922289) -->
<skip />
- <!-- no translation found for progress_unmounting (535863554318797377) -->
+ <!-- no translation found for progress_unmounting (3923810448507612746) -->
<skip />
- <!-- no translation found for progress_unmounting (5556813978958789471) -->
+ <!-- no translation found for progress_unmounting (1327894998409537190) -->
<skip />
- <!-- no translation found for progress_erasing (4183664626203056915) -->
+ <!-- no translation found for progress_erasing (4521573321524340058) -->
<skip />
- <!-- no translation found for progress_erasing (2115214724367534095) -->
+ <!-- no translation found for progress_erasing (6596988875507043042) -->
<skip />
<!-- no translation found for format_error (6299769563624776948) -->
<skip />
@@ -1336,19 +1680,19 @@
<skip />
<!-- no translation found for sync_too_many_deletes (5296321850662746890) -->
<skip />
- <!-- no translation found for sync_too_many_deletes_desc (7030265992955132593) -->
+ <!-- no translation found for sync_too_many_deletes_desc (496551671008694245) -->
<skip />
- <!-- no translation found for sync_really_delete (8933566316059338692) -->
+ <!-- no translation found for sync_really_delete (2572600103122596243) -->
<skip />
- <!-- no translation found for sync_undo_deletes (8610996708225006328) -->
+ <!-- no translation found for sync_undo_deletes (2941317360600338602) -->
<skip />
- <!-- no translation found for sync_do_nothing (8717589462945226869) -->
+ <!-- no translation found for sync_do_nothing (3743764740430821845) -->
<skip />
<!-- no translation found for choose_account_label (5655203089746423927) -->
<skip />
<!-- no translation found for add_account_label (2935267344849993553) -->
<skip />
- <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <!-- no translation found for choose_account_text (6303348737197849675) -->
<skip />
<!-- no translation found for add_account_button_label (3611982894853435874) -->
<skip />
@@ -1356,7 +1700,7 @@
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
<skip />
- <!-- no translation found for number_picker_increment_scroll_mode (1343063395404990189) -->
+ <!-- no translation found for number_picker_increment_scroll_mode (3073101067441638428) -->
<skip />
<!-- no translation found for number_picker_increment_scroll_action (4628981789985093179) -->
<skip />
@@ -1440,7 +1784,7 @@
<skip />
<!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
<skip />
- <!-- no translation found for keyboard_headset_required_to_hear_password (5913502399391940888) -->
+ <!-- no translation found for keyboard_headset_required_to_hear_password (7011927352267668657) -->
<skip />
<!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
<skip />
@@ -1450,17 +1794,17 @@
<skip />
<!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
<skip />
- <!-- no translation found for storage_internal (7556050805474115618) -->
+ <!-- no translation found for storage_internal (4891916833657929263) -->
<skip />
- <!-- no translation found for storage_sd_card (8921771478629812343) -->
+ <!-- no translation found for storage_sd_card (3282948861378286745) -->
<skip />
<!-- no translation found for storage_usb (3017954059538517278) -->
<skip />
- <!-- no translation found for extract_edit_menu_button (302060189057163906) -->
+ <!-- no translation found for extract_edit_menu_button (8940478730496610137) -->
<skip />
<!-- no translation found for data_usage_warning_title (1955638862122232342) -->
<skip />
- <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <!-- no translation found for data_usage_warning_body (2814673551471969954) -->
<skip />
<!-- no translation found for data_usage_3g_limit_title (7093334419518706686) -->
<skip />
@@ -1470,7 +1814,7 @@
<skip />
<!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
- <!-- no translation found for data_usage_limit_body (4313857592916426843) -->
+ <!-- no translation found for data_usage_limit_body (3317964706973601386) -->
<skip />
<!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
<skip />
@@ -1480,11 +1824,11 @@
<skip />
<!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_limit_snoozed_body (7035490278298441767) -->
<skip />
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_restricted_body (6741521330997452990) -->
<skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
@@ -1524,4 +1868,10 @@
<skip />
<!-- no translation found for list_delimeter (3975117572185494152) -->
<skip />
+ <!-- no translation found for sending (3245653681008218030) -->
+ <skip />
+ <!-- no translation found for launchBrowserDefault (2057951947297614725) -->
+ <skip />
+ <!-- no translation found for SetupCallDefault (5834948469253758575) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index bc7f619..ecee96d 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Raportaţi"</string>
<string name="wait" msgid="7147118217226317732">"Aşteptaţi"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Pagina a devenit inactivă."\n\n"Doriţi să o închideţi?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Aplicaţie redirecţionată"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> funcţionează acum."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> a fost lansată iniţial."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 1d71fd6..7b95291 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"ОК"</string>
<string name="report" msgid="4060218260984795706">"Отзыв"</string>
<string name="wait" msgid="7147118217226317732">"Подождать"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Страница не отвечает."\n\n"Закрыть ее?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Приложение перенаправлено"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Приложение <xliff:g id="APP_NAME">%1$s</xliff:g> выполняется."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Изначально было запущено приложение <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index cb2e764..aafaa9e 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Prehľad"</string>
<string name="wait" msgid="7147118217226317732">"Čakajte"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Stránka nereaguje."\n\n"Chcete ju zavrieť?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Presmerovaná aplikácia"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Je spustená aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Pôvodne bola spustená aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 5e7c136..aa98c80 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"V redu"</string>
<string name="report" msgid="4060218260984795706">"Poročaj"</string>
<string name="wait" msgid="7147118217226317732">"Čakaj"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Stran se ne odziva."\n" "\n"Ali jo želite zapreti?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Program preusmerjen"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> se izvaja."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Prvotno je bil zagnan program <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index bea78ce..7ba8503 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -50,7 +50,7 @@
<string name="invalidPuk" msgid="8761456210898036513">"Унесите PUK који се састоји од 8 цифара или више."</string>
<string name="needPuk" msgid="919668385956251611">"SIM картица је закључана PUK кодом. Унесите PUK кôд да бисте је откључали."</string>
<string name="needPuk2" msgid="4526033371987193070">"Унесите PUK2 да бисте деблокирали SIM картицу."</string>
- <string name="ClipMmi" msgid="6952821216480289285">"Долазећи ИД позиваоца"</string>
+ <string name="ClipMmi" msgid="6952821216480289285">"Долазни ИД позиваоца"</string>
<string name="ClirMmi" msgid="7784673673446833091">"Одлазни ИД позиваоца"</string>
<string name="CfMmi" msgid="5123218989141573515">"Преусмеравање позива"</string>
<string name="CwMmi" msgid="9129678056795016867">"Позив на чекању"</string>
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"Потврди"</string>
<string name="report" msgid="4060218260984795706">"Пријави"</string>
<string name="wait" msgid="7147118217226317732">"Сачекај"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Страница је престала да се одазива."\n\n" Да ли желите да је затворите?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Апликација је преусмерена"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> је сада покренута."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Првобитно је покренута апликација <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index bc59298..4d3cea5 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Rapportera"</string>
<string name="wait" msgid="7147118217226317732">"Vänta"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Sidan har slutat svara."\n\n"Vill du stänga sidan?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Appen omdirigeras"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> körs."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> startades först."</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 5077d1f..a9a8679 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"Sawa"</string>
<string name="report" msgid="4060218260984795706">"Ripoti"</string>
<string name="wait" msgid="7147118217226317732">"Subiri"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Ukurasa umekwama. "\n" "\n" Je, unataka kuufunga?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Programu imeelekezwa kwingine"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g>inaendesha sasa."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilizinduliwa mwanzoni."</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 0babb00..6a8431c 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"ตกลง"</string>
<string name="report" msgid="4060218260984795706">"รายงาน"</string>
<string name="wait" msgid="7147118217226317732">"รอ"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"หน้าเว็บนี้ไม่ตอบสนอง"\n\n"คุณต้องการปิดหรือไม่"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"แอปฯ ที่เปลี่ยนเส้นทาง"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังทำงานอยู่ในขณะนี้"</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> เปิดใช้ไว้แล้ว"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index b31fbf7..04635c8 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Ulat"</string>
<string name="wait" msgid="7147118217226317732">"Maghintay"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Hindi na tumutugon ang pahina."\n\n"Nais mo ba itong isara?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Na-redirect ang app"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Tumatakbo na ngayon ang <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Orihinal na nalunsad ang <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index ebade95..bfe9c0a 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"Tamam"</string>
<string name="report" msgid="4060218260984795706">"Bildir"</string>
<string name="wait" msgid="7147118217226317732">"Bekle"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Sayfa yanıt vermiyor."\n\n"Kapatmak ister misiniz?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Uygulama yönlendirildi"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> şimdi çalışıyor."</string>
<string name="launch_warning_original" msgid="188102023021668683">"İlk olarak <xliff:g id="APP_NAME">%1$s</xliff:g> başlatıldı."</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index bc5456b..6708893 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Повідом."</string>
<string name="wait" msgid="7147118217226317732">"Чекати"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Сторінка не відповідає."\n\n"Закрити її?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Програму переадресовано"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Зараз працює <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Спочатку було запущено <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 177c474..6da402c 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Báo cáo"</string>
<string name="wait" msgid="7147118217226317732">"Đợi"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Trang không phản hồi."\n\n"Bạn có muốn đóng trang không?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Đã chuyển hướng ứng dụng"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> hiện đang chạy."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> được khởi chạy trước tiên."</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index b682eac..6c40202 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"确定"</string>
<string name="report" msgid="4060218260984795706">"报告"</string>
<string name="wait" msgid="7147118217226317732">"等待"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"该网页已无响应。"\n\n"要将其关闭吗?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"应用程序已重定向"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g>目前正在运行。"</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g>已启动。"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 0928de8..131c2f7 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -697,7 +697,7 @@
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"您嘗試解除這支手機的鎖定已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次,手機現在將恢復原廠設定。"</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> 秒後再試一次。"</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"忘記解鎖圖形?"</string>
- <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"解除封鎖帳戶"</string>
+ <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"帳戶解鎖"</string>
<string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"圖形嘗試次數過多"</string>
<string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"如要解除鎖定,請使用 Google 帳戶登入。"</string>
<string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"使用者名稱 (電子郵件)"</string>
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"確定"</string>
<string name="report" msgid="4060218260984795706">"回報"</string>
<string name="wait" msgid="7147118217226317732">"等待"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"網頁沒有回應。"\n\n"您要結束嗎?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"應用程式已重新導向"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」現在正在執行。"</string>
<string name="launch_warning_original" msgid="188102023021668683">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」原先已啟動。"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index fc01c1d..1068b66 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -915,6 +915,7 @@
<string name="force_close" msgid="8346072094521265605">"KULUNGILE"</string>
<string name="report" msgid="4060218260984795706">"Umbiko"</string>
<string name="wait" msgid="7147118217226317732">"Linda"</string>
+ <string name="webpage_unresponsive" msgid="3272758351138122503">"Leli khasi alisaphenduli."\n\n"Ingabe ufuna ukulivala na?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Insiza idluliselwe phambili"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> iyasebenza."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> iqalisiwe."</string>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index bc132eb..0511b75 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -361,7 +361,7 @@
with the modem or some other restricted hardware, add "/dev/bus/usb/001/"
to this list. If this is empty, no parts of the host USB bus will be excluded.
-->
- <string-array name="config_usbHostBlacklist">
+ <string-array name="config_usbHostBlacklist" translatable="false">
</string-array>
<!-- Vibrator pattern for feedback about a long screen/key press -->
@@ -533,13 +533,13 @@
<!-- Component name of the default wallpaper. This will be ImageWallpaper if not
specified -->
- <string name="default_wallpaper_component">@null</string>
+ <string name="default_wallpaper_component" translatable="false">@null</string>
<!-- Component name of the service providing network location support. -->
- <string name="config_networkLocationProvider">@null</string>
+ <string name="config_networkLocationProvider" translatable="false">@null</string>
<!-- Component name of the service providing geocoder API support. -->
- <string name="config_geocodeProvider">@null</string>
+ <string name="config_geocodeProvider" translatable="false">@null</string>
<!-- Boolean indicating if current platform supports bluetooth SCO for off call
use cases -->
@@ -563,7 +563,7 @@
<integer name="config_datause_throttle_kbitsps">300</integer>
<!-- The default iface on which to monitor data use -->
- <string name="config_datause_iface">rmnet0</string>
+ <string name="config_datause_iface" translatable="false">rmnet0</string>
<!-- The default reduced-datarate notification mask -->
<!-- 2 means give warning -->
@@ -593,11 +593,11 @@
<bool name="config_sms_capable">true</bool>
<!-- IP address of the dns server to use if nobody else suggests one -->
- <string name="config_default_dns_server">8.8.8.8</string>
+ <string name="config_default_dns_server" translatable="false">8.8.8.8</string>
<!-- The default character set for GsmAlphabet -->
<!-- Empty string means MBCS is not considered -->
- <string name="gsm_alphabet_default_charset"></string>
+ <string name="gsm_alphabet_default_charset" translatable="false"></string>
<!-- Enables SIP on WIFI only -->
<bool name="config_sip_wifi_only">false</bool>
@@ -632,7 +632,7 @@
OMA-TS-UAProf-V2_0-20060206-A Section 8.1.1.1. If the URL contains a '%s'
format string then that substring will be replaced with the value of
Build.MODEL. The format string shall not be escaped. -->
- <string name="config_useragentprofile_url"></string>
+ <string name="config_useragentprofile_url" translatable="false"></string>
<!-- When a database query is executed, the results retuned are paginated
in pages of size (in KB) indicated by this value -->
@@ -643,7 +643,7 @@
<bool name="config_showMenuShortcutsWhenKeyboardPresent">false</bool>
<!-- Do not translate. Defines the slots is Two Digit Number for dialing normally not USSD -->
- <string-array name="config_twoDigitNumberPattern">
+ <string-array name="config_twoDigitNumberPattern" translatable="false">
</string-array>
<!-- The VoiceMail default value is displayed to my own number if it is true -->
@@ -743,18 +743,18 @@
<!-- Set and Unsets WiMAX -->
<bool name="config_wimaxEnabled">false</bool>
<!-- Location of the wimax framwork jar location -->
- <string name="config_wimaxServiceJarLocation"></string>
+ <string name="config_wimaxServiceJarLocation" translatable="false"></string>
<!-- Location of the wimax native library locaiton -->
- <string name="config_wimaxNativeLibLocation"></string>
+ <string name="config_wimaxNativeLibLocation" translatable="false"></string>
<!-- Name of the wimax manager class -->
- <string name="config_wimaxManagerClassname"></string>
+ <string name="config_wimaxManagerClassname" translatable="false"></string>
<!-- Name of the wimax service class -->
- <string name="config_wimaxServiceClassname"></string>
+ <string name="config_wimaxServiceClassname" translatable="false"></string>
<!-- Name of the wimax state tracker clas -->
- <string name="config_wimaxStateTrackerClassname"></string>
+ <string name="config_wimaxStateTrackerClassname" translatable="false"></string>
<!-- Name of screensaver components to look for if none has been chosen by the user -->
- <string name="config_defaultDreamComponent">com.google.android.deskclock/com.android.deskclock.Screensaver</string>
+ <string name="config_defaultDreamComponent" translatable="false">com.google.android.deskclock/com.android.deskclock.Screensaver</string>
<!-- Base "touch slop" value used by ViewConfiguration as a
movement threshold where scrolling should begin. -->
diff --git a/docs/html/design/patterns/actionbar.html b/docs/html/design/patterns/actionbar.html
index 99ae2d7..911c549 100644
--- a/docs/html/design/patterns/actionbar.html
+++ b/docs/html/design/patterns/actionbar.html
@@ -133,7 +133,7 @@
you wish.
Important: If the app is currently not displaying the top-level screen, be sure to display the Up
caret to the left of the app icon, so the user can navigate up the hierarchy. For more discussion of
-Up navigation, see the "Navigation" pattern.
+Up navigation, see the <a href="../patterns/navigation.html">Navigation</a> pattern.
<div class="figure">
<img src="../static/content/action_bar_pattern_up_app_icon.png">
@@ -369,6 +369,22 @@
<p>If either F, I, or T apply, then it's appropriate for the action bar. Otherwise, it belongs in the
action overflow.</p>
+<p>
+
+Pre-defined glyphs should be used for certain common actions such as "refresh" and "share." The
+download link below provides a package with icons that are scaled for various screen densities and
+are suitable for use with the Holo Light and Holo Dark themes. The package also includes unstyled
+icons that you can modify to match your theme, in addition to Adobe® Illustrator® source
+files for further customization.
+
+</p>
+<p>
+
+<a href="../static/download/action_bar_icons-v4.0.zip">Download the Action Bar Icon
+Pack</a>
+
+</p>
+
<div class="layout-content-row">
<div class="layout-content-col span-6">
diff --git a/docs/html/design/static/download/action_bar_icons-v4.0.zip b/docs/html/design/static/download/action_bar_icons-v4.0.zip
index e255931..4568894 100644
--- a/docs/html/design/static/download/action_bar_icons-v4.0.zip
+++ b/docs/html/design/static/download/action_bar_icons-v4.0.zip
Binary files differ
diff --git a/docs/html/design/style/iconography.html b/docs/html/design/style/iconography.html
index 663770b..5d5d200 100644
--- a/docs/html/design/style/iconography.html
+++ b/docs/html/design/style/iconography.html
@@ -193,10 +193,28 @@
<h2 id="actionbar">Action Bar</h2>
-<p>Action bar icons are graphic buttons that represent the most important actions people can take
-within your app. Each one should employ a simple metaphor representing a single concept that most
-people can grasp at a glance.</p>
+<p>
+Action bar icons are graphic buttons that represent the most important actions people can take
+within your app. Each one should employ a simple metaphor representing a single concept that most
+people can grasp at a glance.
+
+</p>
+<p>
+
+Pre-defined glyphs should be used for certain common actions such as "refresh" and "share." The
+download link below provides a package with icons that are scaled for various screen densities and
+are suitable for use with the Holo Light and Holo Dark themes. The package also includes unstyled
+icons that you can modify to match your theme, in addition to Adobe® Illustrator® source
+files for further customization.
+
+</p>
+<p>
+
+<a href="../static/download/action_bar_icons-v4.0.zip">Download the Action Bar Icon
+Pack</a>
+
+</p>
<div class="layout-content-row">
<div class="layout-content-col span-4">
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
index 0298a8e..cfbda2b 100644
--- a/docs/html/sitemap.txt
+++ b/docs/html/sitemap.txt
@@ -231,7 +231,6 @@
http://developer.android.com/resources/samples/CubeLiveWallpaper/index.html
http://developer.android.com/resources/samples/LunarLander/index.html
http://developer.android.com/resources/samples/MultiResolution/index.html
-http://developer.android.com/resources/samples/NFCDemo/index.html
http://developer.android.com/resources/samples/NotePad/index.html
http://developer.android.com/resources/samples/SampleSyncAdapter/index.html
http://developer.android.com/resources/samples/SearchableDictionary/index.html
@@ -1996,17 +1995,6 @@
http://developer.android.com/reference/android/content/DialogInterface.html
http://developer.android.com/reference/org/apache/http/message/BasicHeaderIterator.html
http://developer.android.com/reference/org/apache/http/message/BasicListHeaderIterator.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/TagViewer.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/NdefMessageParser.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/record/ParsedNdefRecord.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/record/SmartPoster.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/record/TextRecord.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/record/UriRecord.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/simulator/FakeTagsActivity.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/simulator/MockNdefMessages.html
-http://developer.android.com/resources/samples/NFCDemo/res/index.html
-http://developer.android.com/resources/samples/NFCDemo/src/index.html
-http://developer.android.com/resources/samples/NFCDemo/AndroidManifest.html
http://developer.android.com/reference/java/lang/InternalError.html
http://developer.android.com/reference/java/lang/Error.html
http://developer.android.com/reference/java/lang/VirtualMachineError.html
@@ -3039,7 +3027,6 @@
http://developer.android.com/sdk/api_diff/3/changes/pkg_java.lang.html
http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.jar.html
http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.logging.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/index.html
http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_removals.html
http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_additions.html
http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_changes.html
@@ -3514,7 +3501,6 @@
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html
http://developer.android.com/resources/samples/ApiDemos/res/layout/custom_view_1.html
http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/index.html
http://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory.html
http://developer.android.com/reference/android/location/package-descr.html
http://developer.android.com/resources/samples/AccessibilityService/res/values/strings.html
@@ -3939,10 +3925,6 @@
http://developer.android.com/resources/samples/ContactManager/res/drawable-mdpi/icon.html
http://developer.android.com/resources/samples/BackupRestore/src/com/example/index.html
http://developer.android.com/reference/org/apache/http/message/package-descr.html
-http://developer.android.com/resources/samples/NFCDemo/res/drawable/index.html
-http://developer.android.com/resources/samples/NFCDemo/res/layout/index.html
-http://developer.android.com/resources/samples/NFCDemo/res/raw/index.html
-http://developer.android.com/resources/samples/NFCDemo/res/values/index.html
http://developer.android.com/reference/android/bluetooth/package-descr.html
http://developer.android.com/resources/samples/SipDemo/res/drawable/index.html
http://developer.android.com/resources/samples/SipDemo/res/layout/index.html
@@ -4110,7 +4092,6 @@
http://developer.android.com/sdk/api_diff/9/changes/methods_index_additions.html
http://developer.android.com/sdk/api_diff/9/changes/methods_index_changes.html
http://developer.android.com/reference/android/media/audiofx/package-descr.html
-http://developer.android.com/resources/samples/NFCDemo/res/values/strings.html
http://developer.android.com/reference/android/sax/ElementListener.html
http://developer.android.com/reference/android/sax/EndElementListener.html
http://developer.android.com/reference/android/sax/EndTextElementListener.html
@@ -4599,7 +4580,6 @@
http://developer.android.com/reference/android/text/method/package-descr.html
http://developer.android.com/resources/samples/JetBoy/JETBOY_content/JETBOY_Music.logic/LgDoc/index.html
http://developer.android.com/resources/samples/TicTacToeMain/res/layout/main.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/index.html
http://developer.android.com/resources/samples/SearchableDictionary/res/drawable-mdpi/ic_menu_search.html
http://developer.android.com/resources/samples/TicTacToeMain/res/values/strings.html
http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_additions.html
@@ -4637,9 +4617,6 @@
http://developer.android.com/resources/samples/SoftKeyboard/res/values-land/index.html
http://developer.android.com/resources/samples/SoftKeyboard/res/xml/index.html
http://developer.android.com/reference/junit/runner/package-descr.html
-http://developer.android.com/resources/samples/NFCDemo/res/layout/tag_divider.html
-http://developer.android.com/resources/samples/NFCDemo/res/layout/tag_text.html
-http://developer.android.com/resources/samples/NFCDemo/res/layout/tag_viewer.html
http://developer.android.com/resources/samples/AccelerometerPlay/res/drawable-ldpi/icon.html
http://developer.android.com/resources/samples/CubeLiveWallpaper/src/com/example/index.html
http://developer.android.com/reference/android/text/style/package-descr.html
@@ -4726,14 +4703,12 @@
http://developer.android.com/sdk/api_diff/3/changes/classes_index_additions.html
http://developer.android.com/sdk/api_diff/3/changes/classes_index_changes.html
http://developer.android.com/resources/samples/WiktionarySimple/src/com/index.html
-http://developer.android.com/resources/samples/NFCDemo/res/drawable/icon.html
http://developer.android.com/resources/samples/SearchableDictionary/res/drawable-hdpi/ic_menu_search.html
http://developer.android.com/resources/samples/SipDemo/res/values/strings.html
http://developer.android.com/resources/samples/SpinnerTest/src/com/android/index.html
http://developer.android.com/sdk/api_diff/3/changes/methods_index_removals.html
http://developer.android.com/sdk/api_diff/3/changes/methods_index_additions.html
http://developer.android.com/sdk/api_diff/3/changes/methods_index_changes.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/index.html
http://developer.android.com/resources/samples/SoftKeyboard/res/xml/method.html
http://developer.android.com/resources/samples/SoftKeyboard/res/xml/qwerty.html
http://developer.android.com/resources/samples/SoftKeyboard/res/xml/symbols.html
@@ -5326,8 +5301,6 @@
http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_removals.html
http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_additions.html
http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_changes.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/record/index.html
-http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/simulator/index.html
http://developer.android.com/resources/samples/BackupRestore/src/com/example/android/index.html
http://developer.android.com/resources/samples/BluetoothChat/src/com/example/android/BluetoothChat/index.html
http://developer.android.com/resources/samples/ContactManager/src/com/example/android/index.html
diff --git a/docs/html/training/design-navigation/ancestral-temporal.jd b/docs/html/training/design-navigation/ancestral-temporal.jd
index 02e43e1..c0b1aef 100644
--- a/docs/html/training/design-navigation/ancestral-temporal.jd
+++ b/docs/html/training/design-navigation/ancestral-temporal.jd
@@ -21,6 +21,7 @@
<h2>You should also read</h2>
<ul>
+ <li><a href="{@docRoot}design/patterns/navigation.html">Android Design: Navigation</a></li>
<li><a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a></li>
</ul>
@@ -30,6 +31,11 @@
<p>Now that users can navigate <a href="descendant-lateral.html">deep into</a> the application's screen hierarchy, we need to provide a method for navigating up the hierarchy, to parent and ancestor screens. Additionally, we should ensure that temporal navigation via the BACK button is respected to respect Android conventions.</p>
+<div class="design-announce">
+<p><strong>Back/Up Navigation Design</strong></p>
+ <p>For design guidelines, read Android Design's <a
+ href="{@docRoot}design/patterns/navigation.html">Navigation</a> pattern guide.</p>
+</div>
<h2 id="temporal-navigation">Support Temporal Navigation: <em>Back</em></h2>
@@ -49,7 +55,7 @@
<h2 id="ancestral-navigation">Provide Ancestral Navigation: <em>Up</em> and <em>Home</em></h2>
-<p>Before Android 3.0, the most common form of ancestral navigation was the <em>Home</em> metaphor. This was generally implemented as a <em>Home</em> item accessible via the device's MENU button, or a <em>Home</em> button at the top-left of the screen, usually as a component of the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>. Upon selecting <em>Home</em>, the user would be taken to the screen at the top of the screen hierarchy, generally known as the application's home screen.</p>
+<p>Before Android 3.0, the most common form of ancestral navigation was the <em>Home</em> metaphor. This was generally implemented as a <em>Home</em> item accessible via the device's MENU button, or a <em>Home</em> button at the top-left of the screen, usually as a component of the Action Bar (<a href="{@docRoot}design/patterns/actionbar.html">pattern docs</a> at Android Design). Upon selecting <em>Home</em>, the user would be taken to the screen at the top of the screen hierarchy, generally known as the application's home screen.</p>
<p>Providing direct access to the application's home screen can give the user a sense of comfort and security. Regardless of where they are in the application, if they get lost in the app, they can select <em>Home</em> to arrive back at the familiar home screen.</p>
diff --git a/docs/html/training/design-navigation/descendant-lateral.jd b/docs/html/training/design-navigation/descendant-lateral.jd
index ebfd913..0064bd4 100644
--- a/docs/html/training/design-navigation/descendant-lateral.jd
+++ b/docs/html/training/design-navigation/descendant-lateral.jd
@@ -18,9 +18,18 @@
<li><a href="#buttons">Buttons and Simple Targets</a></li>
<li><a href="#lists">Lists, Grids, Carousels, and Stacks</a></li>
<li><a href="#tabs">Tabs</a></li>
- <li><a href="#paging">Horizontal Paging</a></li>
+ <li><a href="#paging">Horizontal Paging (Swipe Views)</a></li>
</ol>
+<h2>You should also read</h2>
+<ul>
+ <li><a href="{@docRoot}design/building-blocks/buttons.html">Android Design: Buttons</a></li>
+ <li><a href="{@docRoot}design/building-blocks/lists.html">Android Design: Lists</a></li>
+ <li><a href="{@docRoot}design/building-blocks/grid-lists.html">Android Design: Grid Lists</a></li>
+ <li><a href="{@docRoot}design/building-blocks/tabs.html">Android Design: Tabs</a></li>
+ <li><a href="{@docRoot}design/patterns/swipe-views.html">Android Design: Swipe Views</a></li>
+</ul>
+
</div>
</div>
@@ -48,6 +57,12 @@
<h2 id="buttons">Buttons and Simple Targets</h2>
+<div class="design-announce">
+<p><strong>Button Design</strong></p>
+ <p>For design guidelines, read Android Design's <a
+ href="{@docRoot}design/building-blocks/buttons.html">Buttons</a> guide.</p>
+</div>
+
<p>For section-related screens, offering touchable and keyboard-focusable targets in the parent is generally the most straightforward and familiar kind of touch-based navigation interface. Examples of such targets include buttons, fixed-size list views, or text links, although the latter is not an ideal UI (user interface) element for touch-based navigation. Upon selecting one of these targets, the child screen is opened, replacing the current context (screen) entirely. Buttons and other simple targets are rarely used for representing items in a collection.</p>
@@ -64,6 +79,13 @@
<h2 id="lists">Lists, Grids, Carousels, and Stacks</h2>
+<div class="design-announce">
+<p><strong>List and Grid List Design</strong></p>
+ <p>For design guidelines, read Android Design's <a
+ href="{@docRoot}design/building-blocks/lists.html">Lists</a> and <a
+ href="{@docRoot}design/building-blocks/grid-lists.html">Grid Lists</a> guides.</p>
+</div>
+
<p>For collection-related screens, and especially for textual information, vertically scrolling lists are often the most straightforward and familiar kind of interface. For more visual or media-rich content items such as photos or videos, vertically scrolling grids of items, horizontally scrolling lists (sometimes referred to as <em>carousels</em>), or stacks (sometimes referred to as <em>cards</em>) can be used instead. These UI elements are generally best used for presenting item collections or large sets of child screens (for example, a list of stories or a list of 10 or more news topics), rather than a small set of unrelated, sibling child screens.</p>
@@ -80,6 +102,12 @@
<h2 id="tabs">Tabs</h2>
+<div class="design-announce">
+<p><strong>Tab Design</strong></p>
+ <p>For design guidelines, read Android Design's <a
+ href="{@docRoot}design/building-blocks/tabs.html">Tabs</a> guide.</p>
+</div>
+
<p>Using tabs is a very popular solution for lateral navigation. This pattern allows grouping of sibling screens, in that the tab content container in the parent screen can embed child screens that otherwise would be entirely separate contexts. Tabs are most appropriate for small sets (4 or fewer) of section-related screens.</p>
@@ -89,7 +117,7 @@
<p class="img-caption"><strong>Figure 5.</strong> Example phone and tablet tab-based navigation interfaces with relevant screen map excerpt.</p>
-<p>Several best practices apply when using tabs. Tabs should be persistent across immediate related screens. Only the designated content region should change when selecting a tab, and tab indicators should remain available at all times. Additionally, tab switches should not be treated as history. For example, if a user switches from a tab <em>A</em> to another tab <em>B</em>, pressing the BACK button (more on that in the <a href="ancestral-temporal.html">next lesson</a>) should not re-select tab <em>A</em>. Tabs are usually laid out horizontally, although other presentations of tab navigation such as using a drop-down list in the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> are sometimes appropriate. Lastly, and most importantly, <em>tabs should always run along the top of the screen</em>, and should not be aligned to the bottom of the screen.</p>
+<p>Several best practices apply when using tabs. Tabs should be persistent across immediate related screens. Only the designated content region should change when selecting a tab, and tab indicators should remain available at all times. Additionally, tab switches should not be treated as history. For example, if a user switches from a tab <em>A</em> to another tab <em>B</em>, pressing the BACK button (more on that in the <a href="ancestral-temporal.html">next lesson</a>) should not re-select tab <em>A</em>. Tabs are usually laid out horizontally, although other presentations of tab navigation such as using a drop-down list in the Action Bar (<a href="{@docRoot}design/patterns/actionbar.html">pattern docs</a> at Android Design) are sometimes appropriate. Lastly, and most importantly, <em>tabs should always run along the top of the screen</em>, and should not be aligned to the bottom of the screen.</p>
<p>There are some obvious immediate benefits of tabs over simpler list- and button-based navigation:</p>
@@ -101,9 +129,15 @@
<p>A common criticism is that space must be reserved for the tab indicators, detracting from the space available to tab contents. This consequence is usually acceptable, and the tradeoff commonly weighs in favor of using this pattern. You should also feel free to customize tab indicators, showing text and/or icons to make optimal use of vertical space. When adjusting indicator heights however, ensure that tab indicators are large enough for a human finger to touch without error.</p>
-<h2 id="paging">Horizontal Paging</h2>
+<h2 id="paging">Horizontal Paging (Swipe Views)</h2>
-<p>Another popular lateral navigation pattern is horizontal paging. This pattern applies best to collection-related sibling screens, such as a list of categories (world, business, technology, and health stories). Like tabs, this pattern also allows grouping screens in that the parent presents the contents of child screens embedded within its own layout.</p>
+<div class="design-announce">
+<p><strong>Swipe Views Design</strong></p>
+ <p>For design guidelines, read Android Design's <a
+ href="{@docRoot}design/patterns/swipe-views.html">Swipe Views</a> pattern guides.</p>
+</div>
+
+<p>Another popular lateral navigation pattern is horizontal paging, also referred to as swipe views. This pattern applies best to collection-related sibling screens, such as a list of categories (world, business, technology, and health stories). Like tabs, this pattern also allows grouping screens in that the parent presents the contents of child screens embedded within its own layout.</p>
<img src="{@docRoot}images/training/app-navigation-descendant-lateral-paging.png"
diff --git a/docs/html/training/design-navigation/index.jd b/docs/html/training/design-navigation/index.jd
index e02d52e..cb20a60 100644
--- a/docs/html/training/design-navigation/index.jd
+++ b/docs/html/training/design-navigation/index.jd
@@ -14,7 +14,7 @@
<p>This class is not specific to any particular version of the Android platform. It is also primarily design-focused and does not require knowledge of the Android SDK. That said, you should have experience using an Android device for a better understanding of the context in which Android applications run.</p>
-<p>You should also have basic familiarity with the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>, used across most applications in devices running Android 3.0 and later.</p>
+<p>You should also have basic familiarity with the Action Bar (<a href="{@docRoot}design/patterns/actionbar.html">pattern docs</a> at Android Design), used across most applications in devices running Android 3.0 and later.</p>
</div>
diff --git a/docs/html/training/design-navigation/multiple-sizes.jd b/docs/html/training/design-navigation/multiple-sizes.jd
index 7a8139f..ebaec0f 100644
--- a/docs/html/training/design-navigation/multiple-sizes.jd
+++ b/docs/html/training/design-navigation/multiple-sizes.jd
@@ -22,6 +22,7 @@
<h2>You should also read</h2>
<ul>
+ <li><a href="{@docRoot}design/patterns/multi-pane-layouts.html">Android Design: Multi-pane Layouts</a></li>
<li><a href="{@docRoot}training/multiscreen/index.html">Designing for Multiple Screens</a></li>
</ul>
@@ -35,6 +36,12 @@
<h2 id="multi-pane-layouts">Group Screens with Multi-pane Layouts</h2>
+<div class="design-announce">
+<p><strong>Multi-pane Layout Design</strong></p>
+ <p>For design guidelines, read Android Design's <a
+ href="{@docRoot}design/patterns/multi-pane-layouts.html">Multi-pane Layouts</a> pattern guide.</p>
+</div>
+
<p>3 to 4-inch screens are generally only suitable for showing a single vertical pane of content at a time, be it a list of items, or detail information about an item, etc. Thus on such devices, screens generally map one-to-one with levels in the information hierarchy (<em>categories</em> → <em>object list</em> → <em>object detail</em>).</p>
<p>Larger screens such as those found on tablets and TVs, on the other hand, generally have much more available screen space and are able to present multiple panes of content. In landscape, panes are usually ordered from left to right in increasing detail order. Users are especially accustomed to multiple panes on larger screens from years and years of desktop application and desktop web site use. Many desktop applications and websites offer a left-hand navigation pane or use a master/detail two-pane layout.</p>
@@ -76,12 +83,12 @@
<li><strong>Expand/collapse</strong>
<img src="{@docRoot}images/training/app-navigation-multiple-sizes-strategy-collapse.png"
alt="Expand/collapse strategy">
- <p>A variation on the stretch strategy is to collapse the contents of the left pane when in portrait. This works quite well with master/detail panes where the left (master) pane contains easily collapsible list items. An example would be for a realtime chat application. In landscape, the left list could contain chat contact photos, names, and online statuses. In portrait, horizontal space could be collapsed by hiding contact names and only showing photos and online status indicator icons.</p></li>
+ <p>A variation on the stretch strategy is to collapse the contents of the left pane when in portrait. This works quite well with master/detail panes where the left (master) pane contains easily collapsible list items. An example would be for a realtime chat application. In landscape, the left list could contain chat contact photos, names, and online statuses. In portrait, horizontal space could be collapsed by hiding contact names and only showing photos and online status indicator icons. Optionally also provide an expand control that allows the user to expand the left pane content to its larger width and vice versa.</p></li>
<li><strong>Show/Hide</strong>
<img src="{@docRoot}images/training/app-navigation-multiple-sizes-strategy-show-hide.png"
alt="Show/Hide strategy">
- <p>In this scenario, the left pane is completely hidden in portrait mode. However, <em>to ensure the functional parity</em> of your screen in portrait and landscape, the left pane should be made available via an onscreen affordance (such as a button). It's usually appropriate to use the <em>Up</em> button in the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> to show the left pane, as is discussed in a <a href="ancestral-temporal.html">later lesson</a>.</p></li>
+ <p>In this scenario, the left pane is completely hidden in portrait mode. However, <em>to ensure the functional parity</em> of your screen in portrait and landscape, the left pane should be made available via an onscreen affordance (such as a button). It's usually appropriate to use the <em>Up</em> button in the Action Bar (<a href="{@docRoot}design/patterns/actionbar.html">pattern docs</a> at Android Design) to show the left pane, as is discussed in a <a href="ancestral-temporal.html">later lesson</a>.</p></li>
<li><strong>Stack</strong>
<img src="{@docRoot}images/training/app-navigation-multiple-sizes-strategy-stack.png"
diff --git a/docs/html/training/design-navigation/wireframing.jd b/docs/html/training/design-navigation/wireframing.jd
index c7687dd..6deceb1 100644
--- a/docs/html/training/design-navigation/wireframing.jd
+++ b/docs/html/training/design-navigation/wireframing.jd
@@ -121,5 +121,5 @@
<li><a href="{@docRoot}guide/topics/ui/index.html">Developer's Guide: User Interface</a>: learn how to implement your user interface designs using the Android SDK.</li>
<li><a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>: implement tabs, up navigation, on-screen actions, etc.
<li><a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a>: implement re-usable, multi-pane layouts
- <li><a href="{@docRoot}sdk/compatibility-library.html">Support Library</a>: implement horizontal paging using <code>ViewPager</code></li>
+ <li><a href="{@docRoot}sdk/compatibility-library.html">Support Library</a>: implement horizontal paging (swipe views) using <code>ViewPager</code></li>
</ul>
diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h
index 756e91d..76ec3b1 100644
--- a/include/media/AudioRecord.h
+++ b/include/media/AudioRecord.h
@@ -149,7 +149,7 @@
RECORD_IIR_ENABLE = AUDIO_IN_ACOUSTICS_TX_IIR_ENABLE,
};
- AudioRecord(int inputSource,
+ AudioRecord(audio_source_t inputSource,
uint32_t sampleRate = 0,
audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channelMask = AUDIO_CHANNEL_IN_MONO,
@@ -175,7 +175,7 @@
* - NO_INIT: audio server or audio hardware not initialized
* - PERMISSION_DENIED: recording is not allowed for the requesting process
* */
- status_t set(int inputSource = 0,
+ status_t set(audio_source_t inputSource = AUDIO_SOURCE_DEFAULT,
uint32_t sampleRate = 0,
audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channelMask = AUDIO_CHANNEL_IN_MONO,
@@ -208,7 +208,7 @@
int channels() const;
uint32_t frameCount() const;
size_t frameSize() const;
- int inputSource() const;
+ audio_source_t inputSource() const;
/* After it's created the track is not active. Call start() to
@@ -367,8 +367,7 @@
audio_track_cblk_t* mCblk;
audio_format_t mFormat;
uint8_t mChannelCount;
- uint8_t mInputSource;
- uint8_t mReserved[2];
+ audio_source_t mInputSource;
status_t mStatus;
uint32_t mLatency;
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h
index c6368fb..6b12c14 100644
--- a/include/media/AudioSystem.h
+++ b/include/media/AudioSystem.h
@@ -163,7 +163,7 @@
audio_stream_type_t stream,
int session = 0);
static void releaseOutput(audio_io_handle_t output);
- static audio_io_handle_t getInput(int inputSource,
+ static audio_io_handle_t getInput(audio_source_t inputSource,
uint32_t samplingRate = 0,
audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channels = AUDIO_CHANNEL_IN_MONO,
diff --git a/include/media/IAudioPolicyService.h b/include/media/IAudioPolicyService.h
index 07d17c5..4d88297 100644
--- a/include/media/IAudioPolicyService.h
+++ b/include/media/IAudioPolicyService.h
@@ -60,7 +60,7 @@
audio_stream_type_t stream,
int session = 0) = 0;
virtual void releaseOutput(audio_io_handle_t output) = 0;
- virtual audio_io_handle_t getInput(int inputSource,
+ virtual audio_io_handle_t getInput(audio_source_t inputSource,
uint32_t samplingRate = 0,
audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channels = 0,
diff --git a/include/media/stagefright/AudioSource.h b/include/media/stagefright/AudioSource.h
index 19bd31b..2427e2f 100644
--- a/include/media/stagefright/AudioSource.h
+++ b/include/media/stagefright/AudioSource.h
@@ -34,7 +34,7 @@
// Note that the "channels" parameter is _not_ the number of channels,
// but a bitmask of audio_channels_t constants.
AudioSource(
- int inputSource, uint32_t sampleRate,
+ audio_source_t inputSource, uint32_t sampleRate,
uint32_t channels = AUDIO_CHANNEL_IN_MONO);
status_t initCheck() const;
diff --git a/libs/gui/Android.mk b/libs/gui/Android.mk
index b8be67d..b6f5b9e 100644
--- a/libs/gui/Android.mk
+++ b/libs/gui/Android.mk
@@ -34,6 +34,13 @@
LOCAL_MODULE:= libgui
+ifeq ($(TARGET_BOARD_PLATFORM), omap4)
+ LOCAL_CFLAGS += -DUSE_FENCE_SYNC
+endif
+ifeq ($(TARGET_BOARD_PLATFORM), s5pc110)
+ LOCAL_CFLAGS += -DUSE_FENCE_SYNC
+endif
+
ifeq ($(TARGET_BOARD_PLATFORM), tegra)
LOCAL_CFLAGS += -DALLOW_DEQUEUE_CURRENT_BUFFER
endif
diff --git a/libs/rs/rsThreadIO.cpp b/libs/rs/rsThreadIO.cpp
index 8ba1a0e..1917774 100644
--- a/libs/rs/rsThreadIO.cpp
+++ b/libs/rs/rsThreadIO.cpp
@@ -124,7 +124,6 @@
while (!mToCore.isEmpty() || waitForCommand) {
uint32_t cmdID = 0;
uint32_t cmdSize = 0;
- ret = true;
if (con->props.mLogTimes) {
con->timerSet(Context::RS_TIMER_IDLE);
}
@@ -136,11 +135,17 @@
delay = 0;
}
}
+
+ if (delay == 0 && timeToWait != 0 && mToCore.isEmpty()) {
+ break;
+ }
+
const void * data = mToCore.get(&cmdID, &cmdSize, delay);
if (!cmdSize) {
// exception or timeout occurred.
- return false;
+ break;
}
+ ret = true;
if (con->props.mLogTimes) {
con->timerSet(Context::RS_TIMER_INTERNAL);
}
diff --git a/media/java/android/media/AmrInputStream.java b/media/java/android/media/AmrInputStream.java
index bc68472..8b7eee2 100644
--- a/media/java/android/media/AmrInputStream.java
+++ b/media/java/android/media/AmrInputStream.java
@@ -44,7 +44,7 @@
private int mGae;
// result amr stream
- private byte[] mBuf = new byte[SAMPLES_PER_FRAME * 2];
+ private final byte[] mBuf = new byte[SAMPLES_PER_FRAME * 2];
private int mBufIn = 0;
private int mBufOut = 0;
diff --git a/media/java/android/media/AsyncPlayer.java b/media/java/android/media/AsyncPlayer.java
index 09aec2e..804528e 100644
--- a/media/java/android/media/AsyncPlayer.java
+++ b/media/java/android/media/AsyncPlayer.java
@@ -49,7 +49,7 @@
}
}
- private LinkedList<Command> mCmdQueue = new LinkedList();
+ private final LinkedList<Command> mCmdQueue = new LinkedList();
private void startSound(Command cmd) {
// Preparing can be slow, so if there is something else
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 936ec0f..78eb89f 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -1509,7 +1509,7 @@
* Map to convert focus event listener IDs, as used in the AudioService audio focus stack,
* to actual listener objects.
*/
- private HashMap<String, OnAudioFocusChangeListener> mAudioFocusIdListenerMap =
+ private final HashMap<String, OnAudioFocusChangeListener> mAudioFocusIdListenerMap =
new HashMap<String, OnAudioFocusChangeListener>();
/**
* Lock to prevent concurrent changes to the list of focus listeners for this AudioManager
@@ -1524,7 +1524,7 @@
/**
* Handler for audio focus events coming from the audio service.
*/
- private FocusEventHandlerDelegate mAudioFocusEventHandlerDelegate =
+ private final FocusEventHandlerDelegate mAudioFocusEventHandlerDelegate =
new FocusEventHandlerDelegate();
/**
@@ -1563,7 +1563,7 @@
}
}
- private IAudioFocusDispatcher mAudioFocusDispatcher = new IAudioFocusDispatcher.Stub() {
+ private final IAudioFocusDispatcher mAudioFocusDispatcher = new IAudioFocusDispatcher.Stub() {
public void dispatchAudioFocusChange(int focusChange, String id) {
Message m = mAudioFocusEventHandlerDelegate.getHandler().obtainMessage(focusChange, id);
@@ -1649,11 +1649,46 @@
mAudioFocusDispatcher, getIdForAudioFocusListener(l),
mContext.getPackageName() /* package name */);
} catch (RemoteException e) {
- Log.e(TAG, "Can't call requestAudioFocus() from AudioService due to "+e);
+ Log.e(TAG, "Can't call requestAudioFocus() on AudioService due to "+e);
}
return status;
}
+ /**
+ * @hide
+ * Used internally by telephony package to request audio focus. Will cause the focus request
+ * to be associated with the "voice communication" identifier only used in AudioService
+ * to identify this use case.
+ * @param streamType use STREAM_RING for focus requests when ringing, VOICE_CALL for
+ * the establishment of the call
+ * @param durationHint the type of focus request. AUDIOFOCUS_GAIN_TRANSIENT is recommended so
+ * media applications resume after a call
+ */
+ public void requestAudioFocusForCall(int streamType, int durationHint) {
+ IAudioService service = getService();
+ try {
+ service.requestAudioFocus(streamType, durationHint, mICallBack, null,
+ AudioService.IN_VOICE_COMM_FOCUS_ID,
+ "system" /* dump-friendly package name */);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Can't call requestAudioFocusForCall() on AudioService due to "+e);
+ }
+ }
+
+ /**
+ * @hide
+ * Used internally by telephony package to abandon audio focus, typically after a call or
+ * when ringing ends and the call is rejected or not answered.
+ * Should match one or more calls to {@link #requestAudioFocusForCall(int, int)}.
+ */
+ public void abandonAudioFocusForCall() {
+ IAudioService service = getService();
+ try {
+ service.abandonAudioFocus(null, AudioService.IN_VOICE_COMM_FOCUS_ID);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Can't call abandonAudioFocusForCall() on AudioService due to "+e);
+ }
+ }
/**
* Abandon audio focus. Causes the previous focus owner, if any, to receive focus.
@@ -1668,7 +1703,7 @@
status = service.abandonAudioFocus(mAudioFocusDispatcher,
getIdForAudioFocusListener(l));
} catch (RemoteException e) {
- Log.e(TAG, "Can't call abandonAudioFocus() from AudioService due to "+e);
+ Log.e(TAG, "Can't call abandonAudioFocus() on AudioService due to "+e);
}
return status;
}
@@ -1920,7 +1955,7 @@
/**
* {@hide}
*/
- private IBinder mICallBack = new Binder();
+ private final IBinder mICallBack = new Binder();
/**
* Checks whether the phone is in silent mode, with or without vibrate.
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index 855e831..5cc24c0 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -161,7 +161,7 @@
/**
* Lock to make sure mRecordingState updates are reflecting the actual state of the object.
*/
- private Object mRecordingStateLock = new Object();
+ private final Object mRecordingStateLock = new Object();
/**
* The listener the AudioRecord notifies when the record position reaches a marker
* or for periodic updates during the progression of the record head.
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 2eafd68..13e3982 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -151,7 +151,7 @@
private boolean mMediaServerOk;
private SoundPool mSoundPool;
- private Object mSoundEffectsLock = new Object();
+ private final Object mSoundEffectsLock = new Object();
private static final int NUM_SOUNDPOOL_CHANNELS = 4;
private static final int SOUND_EFFECT_VOLUME = 1000;
@@ -168,7 +168,7 @@
/* Sound effect file name mapping sound effect id (AudioManager.FX_xxx) to
* file index in SOUND_EFFECT_FILES[] (first column) and indicating if effect
* uses soundpool (second column) */
- private int[][] SOUND_EFFECT_FILES_MAP = new int[][] {
+ private final int[][] SOUND_EFFECT_FILES_MAP = new int[][] {
{0, -1}, // FX_KEY_CLICK
{0, -1}, // FX_FOCUS_NAVIGATION_UP
{0, -1}, // FX_FOCUS_NAVIGATION_DOWN
@@ -181,7 +181,7 @@
};
/** @hide Maximum volume index values for audio streams */
- private int[] MAX_STREAM_VOLUME = new int[] {
+ private final int[] MAX_STREAM_VOLUME = new int[] {
5, // STREAM_VOICE_CALL
7, // STREAM_SYSTEM
7, // STREAM_RING
@@ -197,7 +197,7 @@
* of another stream: This avoids multiplying the volume settings for hidden
* stream types that follow other stream behavior for volume settings
* NOTE: do not create loops in aliases! */
- private int[] STREAM_VOLUME_ALIAS = new int[] {
+ private final int[] STREAM_VOLUME_ALIAS = new int[] {
AudioSystem.STREAM_VOICE_CALL, // STREAM_VOICE_CALL
AudioSystem.STREAM_SYSTEM, // STREAM_SYSTEM
AudioSystem.STREAM_RING, // STREAM_RING
@@ -210,7 +210,7 @@
AudioSystem.STREAM_MUSIC // STREAM_TTS
};
- private AudioSystem.ErrorCallback mAudioSystemCallback = new AudioSystem.ErrorCallback() {
+ private final AudioSystem.ErrorCallback mAudioSystemCallback = new AudioSystem.ErrorCallback() {
public void onError(int error) {
switch (error) {
case AudioSystem.AUDIO_STATUS_SERVER_DIED:
@@ -270,17 +270,17 @@
private boolean mIsRinging = false;
// Devices currently connected
- private HashMap <Integer, String> mConnectedDevices = new HashMap <Integer, String>();
+ private final HashMap <Integer, String> mConnectedDevices = new HashMap <Integer, String>();
// Forced device usage for communications
private int mForcedUseForComm;
// List of binder death handlers for setMode() client processes.
// The last process to have called setMode() is at the top of the list.
- private ArrayList <SetModeDeathHandler> mSetModeDeathHandlers = new ArrayList <SetModeDeathHandler>();
+ private final ArrayList <SetModeDeathHandler> mSetModeDeathHandlers = new ArrayList <SetModeDeathHandler>();
// List of clients having issued a SCO start request
- private ArrayList <ScoClient> mScoClients = new ArrayList <ScoClient>();
+ private final ArrayList <ScoClient> mScoClients = new ArrayList <ScoClient>();
// BluetoothHeadset API to control SCO connection
private BluetoothHeadset mBluetoothHeadset;
@@ -992,8 +992,6 @@
if (mode != mMode) {
status = AudioSystem.setPhoneState(mode);
if (status == AudioSystem.AUDIO_STATUS_OK) {
- // automatically handle audio focus for mode changes
- handleFocusForCalls(mMode, mode, cb);
mMode = mode;
} else {
if (hdlr != null) {
@@ -1024,40 +1022,6 @@
return newModeOwnerPid;
}
- /** pre-condition: oldMode != newMode */
- private void handleFocusForCalls(int oldMode, int newMode, IBinder cb) {
- // if ringing
- if (newMode == AudioSystem.MODE_RINGTONE) {
- // if not ringing silently
- int ringVolume = AudioService.this.getStreamVolume(AudioManager.STREAM_RING);
- if (ringVolume > 0) {
- // request audio focus for the communication focus entry
- requestAudioFocus(AudioManager.STREAM_RING,
- AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, cb,
- null /* IAudioFocusDispatcher allowed to be null only for this clientId */,
- IN_VOICE_COMM_FOCUS_ID /*clientId*/,
- "system");
-
- }
- }
- // if entering call
- else if ((newMode == AudioSystem.MODE_IN_CALL)
- || (newMode == AudioSystem.MODE_IN_COMMUNICATION)) {
- // request audio focus for the communication focus entry
- // (it's ok if focus was already requested during ringing)
- requestAudioFocus(AudioManager.STREAM_RING,
- AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, cb,
- null /* IAudioFocusDispatcher allowed to be null only for this clientId */,
- IN_VOICE_COMM_FOCUS_ID /*clientId*/,
- "system");
- }
- // if exiting call
- else if (newMode == AudioSystem.MODE_NORMAL) {
- // abandon audio focus for communication focus entry
- abandonAudioFocus(null, IN_VOICE_COMM_FOCUS_ID);
- }
- }
-
/** @see AudioManager#getMode() */
public int getMode() {
return mMode;
@@ -2896,9 +2860,10 @@
//==========================================================================================
/* constant to identify focus stack entry that is used to hold the focus while the phone
- * is ringing or during a call
+ * is ringing or during a call. Used by com.android.internal.telephony.CallManager when
+ * entering and exiting calls.
*/
- private final static String IN_VOICE_COMM_FOCUS_ID = "AudioFocus_For_Phone_Ring_And_Calls";
+ public final static String IN_VOICE_COMM_FOCUS_ID = "AudioFocus_For_Phone_Ring_And_Calls";
private final static Object mAudioFocusLock = new Object();
@@ -2980,7 +2945,7 @@
}
}
- private Stack<FocusStackEntry> mFocusStack = new Stack<FocusStackEntry>();
+ private final Stack<FocusStackEntry> mFocusStack = new Stack<FocusStackEntry>();
/**
* Helper function:
@@ -3357,7 +3322,7 @@
* synchronized on mRCStack, but also BEFORE on mFocusLock as any change in either
* stack, audio focus or RC, can lead to a change in the remote control display
*/
- private Stack<RemoteControlStackEntry> mRCStack = new Stack<RemoteControlStackEntry>();
+ private final Stack<RemoteControlStackEntry> mRCStack = new Stack<RemoteControlStackEntry>();
/**
* Helper function:
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 925f965..9d6c9f6 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -111,7 +111,7 @@
// there can only be one user at a time for the native functions (and
// they cannot keep state in the native code across function calls). We
// use sLock to serialize the accesses.
- private static Object sLock = new Object();
+ private static final Object sLock = new Object();
/**
* Reads Exif tags from the specified JPEG file.
diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java
index e275aa6..7f7e284 100644
--- a/media/java/android/media/MediaFile.java
+++ b/media/java/android/media/MediaFile.java
@@ -120,18 +120,18 @@
}
}
- private static HashMap<String, MediaFileType> sFileTypeMap
+ private static final HashMap<String, MediaFileType> sFileTypeMap
= new HashMap<String, MediaFileType>();
- private static HashMap<String, Integer> sMimeTypeMap
+ private static final HashMap<String, Integer> sMimeTypeMap
= new HashMap<String, Integer>();
// maps file extension to MTP format code
- private static HashMap<String, Integer> sFileTypeToFormatMap
+ private static final HashMap<String, Integer> sFileTypeToFormatMap
= new HashMap<String, Integer>();
// maps mime type to MTP format code
- private static HashMap<String, Integer> sMimeTypeToFormatMap
+ private static final HashMap<String, Integer> sMimeTypeToFormatMap
= new HashMap<String, Integer>();
// maps MTP format code to mime type
- private static HashMap<Integer, String> sFormatToMimeTypeMap
+ private static final HashMap<Integer, String> sFormatToMimeTypeMap
= new HashMap<Integer, String>();
static void addFileType(String extension, int fileType, String mimeType) {
diff --git a/media/java/android/media/MediaInserter.java b/media/java/android/media/MediaInserter.java
index a998407..e92c710 100644
--- a/media/java/android/media/MediaInserter.java
+++ b/media/java/android/media/MediaInserter.java
@@ -32,7 +32,7 @@
* {@hide}
*/
public class MediaInserter {
- private HashMap<Uri, List<ContentValues>> mRowMap =
+ private final HashMap<Uri, List<ContentValues>> mRowMap =
new HashMap<Uri, List<ContentValues>>();
private IContentProvider mProvider;
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index 08e6032..a720c0a 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -138,10 +138,13 @@
*/
public final class AudioSource {
/* Do not change these values without updating their counterparts
- * in include/media/mediarecorder.h!
+ * in system/core/include/system/audio.h!
*/
private AudioSource() {}
+
+ /** Default audio source **/
public static final int DEFAULT = 0;
+
/** Microphone audio source */
public static final int MIC = 1;
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index b06ef95..cfd6eea 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -345,7 +345,7 @@
// this should be set when scanning files on a case insensitive file system.
private boolean mCaseInsensitivePaths;
- private BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options();
+ private final BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options();
private static class FileCacheEntry {
long mRowId;
@@ -401,7 +401,7 @@
+ Settings.System.ALARM_ALERT);
}
- private MyMediaScannerClient mClient = new MyMediaScannerClient();
+ private final MyMediaScannerClient mClient = new MyMediaScannerClient();
private boolean isDrmEnabled() {
String prop = SystemProperties.get("drm.service.enabled");
@@ -1035,7 +1035,7 @@
// First read existing files from the files table
c = mMediaProvider.query(mFilesUri, FILES_PRESCAN_PROJECTION,
- where, selectionArgs, null);
+ where, selectionArgs, null, null);
if (c != null) {
mWasEmptyPriorToScan = c.getCount() == 0;
@@ -1072,7 +1072,7 @@
// compute original size of images
mOriginalCount = 0;
- c = mMediaProvider.query(mImagesUri, ID_PROJECTION, null, null, null);
+ c = mMediaProvider.query(mImagesUri, ID_PROJECTION, null, null, null, null);
if (c != null) {
mOriginalCount = c.getCount();
c.close();
@@ -1107,7 +1107,7 @@
new String [] { "_data" },
null,
null,
- null);
+ null, null);
Log.v(TAG, "pruneDeadThumbnailFiles... " + c);
if (c != null && c.moveToFirst()) {
do {
@@ -1472,7 +1472,7 @@
if (bestMatch.mRowId == 0) {
Cursor c = mMediaProvider.query(mAudioUri, ID_PROJECTION,
MediaStore.Files.FileColumns.DATA + "=?",
- new String[] { bestMatch.mPath }, null);
+ new String[] { bestMatch.mPath }, null, null);
if (c != null) {
if (c.moveToNext()) {
bestMatch.mRowId = c.getLong(0);
diff --git a/media/java/android/media/MediaScannerConnection.java b/media/java/android/media/MediaScannerConnection.java
index 969da39..21b6e14 100644
--- a/media/java/android/media/MediaScannerConnection.java
+++ b/media/java/android/media/MediaScannerConnection.java
@@ -46,7 +46,7 @@
private IMediaScannerService mService;
private boolean mConnected; // true if connect() has been called since last disconnect()
- private IMediaScannerListener.Stub mListener = new IMediaScannerListener.Stub() {
+ private final IMediaScannerListener.Stub mListener = new IMediaScannerListener.Stub() {
public void scanCompleted(String path, Uri uri) {
MediaScannerConnectionClient client = mClient;
if (client != null) {
diff --git a/media/java/android/media/MiniThumbFile.java b/media/java/android/media/MiniThumbFile.java
index df141c1..63b149c 100644
--- a/media/java/android/media/MiniThumbFile.java
+++ b/media/java/android/media/MiniThumbFile.java
@@ -52,7 +52,7 @@
private RandomAccessFile mMiniThumbFile;
private FileChannel mChannel;
private ByteBuffer mBuffer;
- private static Hashtable<String, MiniThumbFile> sThumbFiles =
+ private static final Hashtable<String, MiniThumbFile> sThumbFiles =
new Hashtable<String, MiniThumbFile>();
/**
diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java
index 77acfe6..18b4ee6 100644
--- a/media/java/android/media/RemoteControlClient.java
+++ b/media/java/android/media/RemoteControlClient.java
@@ -576,6 +576,7 @@
/**
* Cache for the metadata strings.
* Access synchronized on mCacheLock
+ * This is re-initialized in apply() and so cannot be final.
*/
private Bundle mMetadata = new Bundle();
@@ -621,7 +622,7 @@
/**
* The IRemoteControlClient implementation
*/
- private IRemoteControlClient mIRCC = new IRemoteControlClient.Stub() {
+ private final IRemoteControlClient mIRCC = new IRemoteControlClient.Stub() {
public void onInformationRequested(int clientGeneration, int infoFlags,
int artWidth, int artHeight) {
diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java
index 9c0819f..7aaf4aa 100644
--- a/media/java/android/media/RingtoneManager.java
+++ b/media/java/android/media/RingtoneManager.java
@@ -224,7 +224,7 @@
* If a column (item from this list) exists in the Cursor, its value must
* be true (value of 1) for the row to be returned.
*/
- private List<String> mFilterColumns = new ArrayList<String>();
+ private final List<String> mFilterColumns = new ArrayList<String>();
private boolean mStopPreviousRingtone = true;
private Ringtone mPreviousRingtone;
diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java
index 19db1c0..268c9fc 100755
--- a/media/java/android/mtp/MtpDatabase.java
+++ b/media/java/android/mtp/MtpDatabase.java
@@ -266,7 +266,7 @@
Cursor c = null;
try {
c = mMediaProvider.query(mObjectsUri, ID_PROJECTION, PATH_WHERE,
- new String[] { path }, null);
+ new String[] { path }, null, null);
if (c != null && c.getCount() > 0) {
Log.w(TAG, "file already exists in beginSendObject: " + path);
return -1;
@@ -433,7 +433,7 @@
}
}
- return mMediaProvider.query(mObjectsUri, ID_PROJECTION, where, whereArgs, null);
+ return mMediaProvider.query(mObjectsUri, ID_PROJECTION, where, whereArgs, null, null);
}
private int[] getObjectList(int storageID, int format, int parent) {
@@ -699,7 +699,7 @@
String path = null;
String[] whereArgs = new String[] { Integer.toString(handle) };
try {
- c = mMediaProvider.query(mObjectsUri, PATH_PROJECTION, ID_WHERE, whereArgs, null);
+ c = mMediaProvider.query(mObjectsUri, PATH_PROJECTION, ID_WHERE, whereArgs, null, null);
if (c != null && c.moveToNext()) {
path = c.getString(1);
}
@@ -815,7 +815,7 @@
Cursor c = null;
try {
c = mMediaProvider.query(mObjectsUri, OBJECT_INFO_PROJECTION,
- ID_WHERE, new String[] { Integer.toString(handle) }, null);
+ ID_WHERE, new String[] { Integer.toString(handle) }, null, null);
if (c != null && c.moveToNext()) {
outStorageFormatParent[0] = c.getInt(1);
outStorageFormatParent[1] = c.getInt(2);
@@ -858,7 +858,7 @@
Cursor c = null;
try {
c = mMediaProvider.query(mObjectsUri, PATH_SIZE_FORMAT_PROJECTION,
- ID_WHERE, new String[] { Integer.toString(handle) }, null);
+ ID_WHERE, new String[] { Integer.toString(handle) }, null, null);
if (c != null && c.moveToNext()) {
String path = c.getString(1);
path.getChars(0, path.length(), outFilePath, 0);
@@ -887,7 +887,7 @@
Cursor c = null;
try {
c = mMediaProvider.query(mObjectsUri, PATH_SIZE_FORMAT_PROJECTION,
- ID_WHERE, new String[] { Integer.toString(handle) }, null);
+ ID_WHERE, new String[] { Integer.toString(handle) }, null, null);
if (c != null && c.moveToNext()) {
// don't convert to media path here, since we will be matching
// against paths in the database matching /data/media
@@ -933,7 +933,7 @@
Uri uri = Files.getMtpReferencesUri(mVolumeName, handle);
Cursor c = null;
try {
- c = mMediaProvider.query(uri, ID_PROJECTION, null, null, null);
+ c = mMediaProvider.query(uri, ID_PROJECTION, null, null, null, null);
if (c == null) {
return null;
}
diff --git a/media/java/android/mtp/MtpPropertyGroup.java b/media/java/android/mtp/MtpPropertyGroup.java
index 76c8569..dab5454 100644
--- a/media/java/android/mtp/MtpPropertyGroup.java
+++ b/media/java/android/mtp/MtpPropertyGroup.java
@@ -191,7 +191,7 @@
// for now we are only reading properties from the "objects" table
c = mProvider.query(mUri,
new String [] { Files.FileColumns._ID, column },
- ID_WHERE, new String[] { Integer.toString(id) }, null);
+ ID_WHERE, new String[] { Integer.toString(id) }, null, null);
if (c != null && c.moveToNext()) {
return c.getString(1);
} else {
@@ -211,7 +211,7 @@
try {
c = mProvider.query(Audio.Media.getContentUri(mVolumeName),
new String [] { Files.FileColumns._ID, column },
- ID_WHERE, new String[] { Integer.toString(id) }, null);
+ ID_WHERE, new String[] { Integer.toString(id) }, null, null);
if (c != null && c.moveToNext()) {
return c.getString(1);
} else {
@@ -232,7 +232,7 @@
Uri uri = Audio.Genres.getContentUriForAudioId(mVolumeName, id);
c = mProvider.query(uri,
new String [] { Files.FileColumns._ID, Audio.GenresColumns.NAME },
- null, null, null);
+ null, null, null, null);
if (c != null && c.moveToNext()) {
return c.getString(1);
} else {
@@ -254,7 +254,7 @@
// for now we are only reading properties from the "objects" table
c = mProvider.query(mUri,
new String [] { Files.FileColumns._ID, column },
- ID_WHERE, new String[] { Integer.toString(id) }, null);
+ ID_WHERE, new String[] { Integer.toString(id) }, null, null);
if (c != null && c.moveToNext()) {
return new Long(c.getLong(1));
}
@@ -323,7 +323,7 @@
try {
// don't query if not necessary
if (depth > 0 || handle == 0xFFFFFFFF || mColumns.length > 1) {
- c = mProvider.query(mUri, mColumns, where, whereArgs, null);
+ c = mProvider.query(mUri, mColumns, where, whereArgs, null, null);
if (c == null) {
return new MtpPropertyList(0, MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE);
}
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp
index 5b5b076..2b3ea38 100644
--- a/media/libmedia/AudioRecord.cpp
+++ b/media/libmedia/AudioRecord.cpp
@@ -84,7 +84,7 @@
}
AudioRecord::AudioRecord(
- int inputSource,
+ audio_source_t inputSource,
uint32_t sampleRate,
audio_format_t format,
uint32_t channelMask,
@@ -119,7 +119,7 @@
}
status_t AudioRecord::set(
- int inputSource,
+ audio_source_t inputSource,
uint32_t sampleRate,
audio_format_t format,
uint32_t channelMask,
@@ -228,7 +228,7 @@
mMarkerReached = false;
mNewPosition = 0;
mUpdatePeriod = 0;
- mInputSource = (uint8_t)inputSource;
+ mInputSource = inputSource;
mFlags = flags;
mInput = input;
AudioSystem::acquireAudioSessionId(mSessionId);
@@ -272,9 +272,9 @@
}
}
-int AudioRecord::inputSource() const
+audio_source_t AudioRecord::inputSource() const
{
- return (int)mInputSource;
+ return mInputSource;
}
// -------------------------------------------------------------------------
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp
index 952d634..124032b 100644
--- a/media/libmedia/AudioSystem.cpp
+++ b/media/libmedia/AudioSystem.cpp
@@ -630,7 +630,7 @@
aps->releaseOutput(output);
}
-audio_io_handle_t AudioSystem::getInput(int inputSource,
+audio_io_handle_t AudioSystem::getInput(audio_source_t inputSource,
uint32_t samplingRate,
audio_format_t format,
uint32_t channels,
diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp
index b5c857f..99385aa4 100644
--- a/media/libmedia/IAudioPolicyService.cpp
+++ b/media/libmedia/IAudioPolicyService.cpp
@@ -172,7 +172,7 @@
}
virtual audio_io_handle_t getInput(
- int inputSource,
+ audio_source_t inputSource,
uint32_t samplingRate,
audio_format_t format,
uint32_t channels,
@@ -181,7 +181,7 @@
{
Parcel data, reply;
data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
- data.writeInt32(inputSource);
+ data.writeInt32((int32_t) inputSource);
data.writeInt32(samplingRate);
data.writeInt32(static_cast <uint32_t>(format));
data.writeInt32(channels);
@@ -461,7 +461,7 @@
case GET_INPUT: {
CHECK_INTERFACE(IAudioPolicyService, data, reply);
- int inputSource = data.readInt32();
+ audio_source_t inputSource = (audio_source_t) data.readInt32();
uint32_t samplingRate = data.readInt32();
audio_format_t format = (audio_format_t) data.readInt32();
uint32_t channels = data.readInt32();
diff --git a/media/libstagefright/AudioSource.cpp b/media/libstagefright/AudioSource.cpp
index 2172cc0..8bdb7c5 100644
--- a/media/libstagefright/AudioSource.cpp
+++ b/media/libstagefright/AudioSource.cpp
@@ -47,7 +47,7 @@
}
AudioSource::AudioSource(
- int inputSource, uint32_t sampleRate, uint32_t channels)
+ audio_source_t inputSource, uint32_t sampleRate, uint32_t channels)
: mStarted(false),
mSampleRate(sampleRate),
mPrevSampleTimeUs(0),
diff --git a/opengl/libs/GLES2_dbg/generate_api_cpp.py b/opengl/libs/GLES2_dbg/generate_api_cpp.py
deleted file mode 100755
index 96cde57..0000000
--- a/opengl/libs/GLES2_dbg/generate_api_cpp.py
+++ /dev/null
@@ -1,219 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-#
-# Copyright 2011, The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import os
-import sys
-
-def RemoveAnnotation(line):
- if line.find(":") >= 0:
- annotation = line[line.find(":"): line.find(" ", line.find(":"))]
- return line.replace(annotation, "*")
- else:
- return line
-
-def generate_api(lines):
- externs = []
- i = 0
- # these have been hand written
- skipFunctions = ["glDrawArrays", "glDrawElements"]
-
- # these have an EXTEND_Debug_* macro for getting data
- extendFunctions = ["glCopyTexImage2D", "glCopyTexSubImage2D", "glReadPixels",
-"glShaderSource", "glTexImage2D", "glTexSubImage2D"]
-
- # these also needs to be forwarded to DbgContext
- contextFunctions = ["glUseProgram", "glEnableVertexAttribArray", "glDisableVertexAttribArray",
-"glVertexAttribPointer", "glBindBuffer", "glBufferData", "glBufferSubData", "glDeleteBuffers",]
-
- for line in lines:
- if line.find("API_ENTRY(") >= 0: # a function prototype
- returnType = line[0: line.find(" API_ENTRY(")]
- functionName = line[line.find("(") + 1: line.find(")")] #extract GL function name
- parameterList = line[line.find(")(") + 2: line.find(") {")]
-
- #if line.find("*") >= 0:
- # extern = "%s Debug_%s(%s);" % (returnType, functionName, parameterList)
- # externs.append(extern)
- # continue
-
- if functionName in skipFunctions:
- sys.stderr.write("!\n! skipping function '%s'\n!\n" % (functionName))
- continue
-
- parameters = parameterList.split(',')
- paramIndex = 0
- if line.find("*") >= 0 and (line.find("*") < line.find(":") or line.find("*") > line.rfind(":")): # unannotated pointer
- if not functionName in extendFunctions:
- # add function to list of functions that should be hand written, but generate code anyways
- extern = "%s Debug_%s(%s);" % (returnType, functionName, RemoveAnnotation(parameterList))
- sys.stderr.write("%s should be hand written\n" % (extern))
- print "// FIXME: this function has pointers, it should be hand written"
- externs.append(extern)
-
- print "%s Debug_%s(%s)\n{" % (returnType, functionName, RemoveAnnotation(parameterList))
- print " glesv2debugger::Message msg;"
-
- if parameterList == "void":
- parameters = []
- arguments = ""
- paramNames = []
- inout = ""
- getData = ""
-
- callerMembers = ""
- setCallerMembers = ""
- setMsgParameters = ""
-
- for parameter in parameters:
- const = parameter.find("const")
- parameter = parameter.replace("const", "")
- parameter = parameter.strip()
- paramType = parameter.split(' ')[0]
- paramName = parameter.split(' ')[1]
- annotation = ""
- arguments += paramName
- if parameter.find(":") >= 0: # has annotation
- assert inout == "" # only one parameter should be annotated
- sys.stderr.write("%s is annotated: %s \n" % (functionName, paramType))
- inout = paramType.split(":")[2]
- annotation = paramType.split(":")[1]
- paramType = paramType.split(":")[0]
- count = 1
- countArg = ""
- if annotation.find("*") >= 0: # [1,n] * param
- count = int(annotation.split("*")[0])
- countArg = annotation.split("*")[1]
- assert countArg in paramNames
- elif annotation in paramNames:
- count = 1
- countArg = annotation
- elif annotation == "GLstring":
- annotation = "strlen(%s)" % (paramName)
- else:
- count = int(annotation)
-
- setMsgParameters += " msg.set_arg%d(ToInt(%s));\n" % (paramIndex, paramName)
- if paramType.find("void") >= 0:
- getData += " msg.mutable_data()->assign(reinterpret_cast<const char *>(%s), %s * sizeof(char));" % (paramName, annotation)
- else:
- getData += " msg.mutable_data()->assign(reinterpret_cast<const char *>(%s), %s * sizeof(%s));" % (paramName, annotation, paramType)
- paramType += "*"
- else:
- if paramType == "GLfloat" or paramType == "GLclampf" or paramType.find("*") >= 0:
- setMsgParameters += " msg.set_arg%d(ToInt(%s));\n" % (paramIndex, paramName)
- else:
- setMsgParameters += " msg.set_arg%d(%s);\n" % (paramIndex, paramName)
- if paramIndex < len(parameters) - 1:
- arguments += ', '
- if const >= 0:
- paramType = "const " + paramType
- paramNames.append(paramName)
- paramIndex += 1
- callerMembers += " %s %s;\n" % (paramType, paramName)
- setCallerMembers += " caller.%s = %s;\n" % (paramName, paramName)
-
- print " struct : public FunctionCall {"
- print callerMembers
- print " const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {"
- if inout in ["out", "inout"]: # get timing excluding output data copy
- print " nsecs_t c0 = systemTime(timeMode);"
- if returnType == "void":
- print " _c->%s(%s);" % (functionName, arguments)
- else:
- print " const int * ret = reinterpret_cast<const int *>(_c->%s(%s));" % (functionName, arguments)
- print " msg.set_ret(ToInt(ret));"
- if inout in ["out", "inout"]:
- print " msg.set_time((systemTime(timeMode) - c0) * 1e-6f);"
- print " " + getData
- if functionName in extendFunctions:
- print "\
-#ifdef EXTEND_AFTER_CALL_Debug_%s\n\
- EXTEND_AFTER_CALL_Debug_%s;\n\
-#endif" % (functionName, functionName)
- if functionName in contextFunctions:
- print " getDbgContextThreadSpecific()->%s(%s);" % (functionName, arguments)
- if returnType == "void":
- print " return 0;"
- else:
- print " return ret;"
- print """ }
- } caller;"""
- print setCallerMembers
- print setMsgParameters
-
- if line.find("*") >= 0 or line.find(":") >= 0:
- print " // FIXME: check for pointer usage"
- if inout in ["in", "inout"]:
- print getData
- if functionName in extendFunctions:
- print "\
-#ifdef EXTEND_Debug_%s\n\
- EXTEND_Debug_%s;\n\
-#endif" % (functionName, functionName)
- print " int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_%s);"\
- % (functionName)
- if returnType != "void":
- if returnType == "GLboolean":
- print " return static_cast<GLboolean>(reinterpret_cast<int>(ret));"
- else:
- print " return reinterpret_cast<%s>(ret);" % (returnType)
- print "}\n"
-
-
- print "// FIXME: the following functions should be written by hand"
- for extern in externs:
- print extern
-
-if __name__ == "__main__":
- print """\
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-// auto generated by generate_api_cpp.py
-
-#include <utils/Debug.h>
-
-#include "src/header.h"
-#include "src/api.h"
-
-template<typename T> static int ToInt(const T & t)
-{
- COMPILE_TIME_ASSERT_FUNCTION_SCOPE(sizeof(T) == sizeof(int));
- return (int &)t;
-}
-"""
- lines = open("gl2_api_annotated.in").readlines()
- generate_api(lines)
- #lines = open("gl2ext_api.in").readlines()
- #generate_api(lines)
-
-
diff --git a/opengl/libs/GLES2_dbg/generate_caller_cpp.py b/opengl/libs/GLES2_dbg/generate_caller_cpp.py
deleted file mode 100755
index ee4208d..0000000
--- a/opengl/libs/GLES2_dbg/generate_caller_cpp.py
+++ /dev/null
@@ -1,199 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-#
-# Copyright 2011, The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import os
-import sys
-
-externs = []
-
-def generate_caller(lines):
- i = 0
- output = ""
- skipFunctions = []
-
- for line in lines:
- if line.find("API_ENTRY(") >= 0: # a function prototype
- returnType = line[0: line.find(" API_ENTRY(")]
- functionName = line[line.find("(") + 1: line.find(")")] #extract GL function name
- parameterList = line[line.find(")(") + 2: line.find(") {")]
-
- #if line.find("*") >= 0:
- # extern = "%s Debug_%s(%s);" % (returnType, functionName, parameterList)
- # externs.append(extern)
- # continue
-
- if functionName in skipFunctions:
- sys.stderr.write("!\n! skipping function '%s'\n!\n" % functionName)
- continue
- output += "\
- case glesv2debugger::Message_Function_%s:\n" % functionName
- parameters = parameterList.split(',')
- paramIndex = 0
- if line.find("*") >= 0 and (line.find("*") < line.find(":") or line.find("*") > line.rfind(":")): # unannotated pointer
- # add function to list of functions that should be hand written, but generate code anyways
- externs.append(functionName)
- output += "\
- ret = GenerateCall_%s(dbg, cmd, msg, prevRet);\n\
- break;\n" % (functionName)
- continue
- elif line.find(":out") >= 0 or line.find(":inout") >= 0:
- externs.append(functionName)
- output += "\
- ret = GenerateCall_%s(dbg, cmd, msg, prevRet);\n\
- break; // annotated output pointers\n" % (functionName)
- continue
-
- if parameterList == "void":
- parameters = []
- arguments = ""
- paramNames = []
- inout = ""
- getData = ""
-
- callerMembers = ""
-
- for parameter in parameters:
- const = parameter.find("const")
- parameter = parameter.replace("const", "")
- parameter = parameter.strip()
- paramType = parameter.split(' ')[0]
- paramName = parameter.split(' ')[1]
- annotation = ""
- if parameter.find(":") >= 0: # has annotation
- assert inout == "" # only one parameter should be annotated
- sys.stderr.write("%s is annotated: %s \n" % (functionName, paramType))
- inout = paramType.split(":")[2]
- annotation = paramType.split(":")[1]
- paramType = paramType.split(":")[0]
- count = 1
- countArg = ""
- if annotation.find("*") >= 0: # [1,n] * param
- count = int(annotation.split("*")[0])
- countArg = annotation.split("*")[1]
- assert countArg in paramNames
- elif annotation in paramNames:
- count = 1
- countArg = annotation
- elif annotation == "GLstring":
- annotation = "strlen(%s)" % (paramName)
- else:
- count = int(annotation)
-
- paramType += "*"
- arguments += "reinterpret_cast<%s>(const_cast<char *>(cmd.data().data()))" % (paramType)
- elif paramType == "GLboolean":
- arguments += "GLboolean(cmd.arg%d())" % (paramIndex)
- else:
- arguments += "static_cast<%s>(cmd.arg%d())" % (paramType, paramIndex)
-
- if paramIndex < len(parameters) - 1:
- arguments += ", "
- if len(arguments) - arguments.rfind("\n") > 60 :
- arguments += "\n\
- "
- if const >= 0:
- paramType = "const " + paramType
- paramNames.append(paramName)
- paramIndex += 1
-
- if returnType == "void":
- output += "\
- dbg->hooks->gl.%s(\n\
- %s);\n\
- break;\n" % (functionName, arguments)
- else:
- output += "\
- msg.set_ret(static_cast<int>(dbg->hooks->gl.%s(\n\
- %s)));\n\
- if (cmd.has_ret())\n\
- ret = reinterpret_cast<int *>(msg.ret());\n\
- break;\n" % (functionName, arguments)
- return output
-
-if __name__ == "__main__":
-
- lines = open("gl2_api_annotated.in").readlines()
- output = generate_caller(lines)
-
- out = open("src/caller.cpp", "w")
- out.write("""\
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-// auto generated by generate_caller_cpp.py
-// implement declarations in caller.h
-
-#include "header.h"
-
-namespace android {
-
-""")
-
- for extern in externs:
- out.write("\
-static const int * GenerateCall_%s(DbgContext * const dbg,\n\
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);\n" % (extern))
- print("\
-static const int * GenerateCall_%s(DbgContext * const dbg,\n\
- const glesv2debugger::Message & cmd,\n\
- glesv2debugger::Message & msg, const int * const prevRet)\n\
-{ assert(0); return prevRet; }\n" % (extern))
-
- out.write(
-"""
-#include "caller.h"
-
-const int * GenerateCall(DbgContext * const dbg, const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- LOGD("GenerateCall function=%u", cmd.function());
- const int * ret = prevRet; // only some functions have return value
- nsecs_t c0 = systemTime(timeMode);
- switch (cmd.function()) {""")
-
- out.write(output)
-
- out.write("""\
- default:
- assert(0);
- }
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.set_context_id(reinterpret_cast<int>(dbg));
- msg.set_function(cmd.function());
- msg.set_type(glesv2debugger::Message_Type_AfterCall);
- return ret;
-}
-
-}; // name space android {
-""")
-
-
diff --git a/opengl/libs/GLES2_dbg/generate_debug_in.py b/opengl/libs/GLES2_dbg/generate_debug_in.py
deleted file mode 100755
index 1280c6f..0000000
--- a/opengl/libs/GLES2_dbg/generate_debug_in.py
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-#
-# Copyright 2011, The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import os
-import sys
-
-def append_functions(functions, lines):
- i = 0
- for line in lines:
- if line.find("API_ENTRY(") >= 0: # a function prototype
- returnType = line[0: line.find(" API_ENTRY(")]
- functionName = line[line.find("(") + 1: line.find(")")] #extract GL function name
- parameterList = line[line.find(")(") + 2: line.find(") {")]
-
- functions.append(functionName)
- #print functionName
- continue
-
- parameters = parameterList.split(',')
- paramIndex = 0
- if line.find("*") >= 0:
- print "// FIXME: this function has pointers, it should be hand written"
- externs.append("%s Tracing_%s(%s);" % (returnType, functionName, parameterList))
- print "%s Tracing_%s(%s)\n{" % (returnType, functionName, parameterList)
-
- if parameterList == "void":
- parameters = []
-
- arguments = ""
-
- for parameter in parameters:
- parameter = parameter.replace("const", "")
- parameter = parameter.strip()
- paramType = parameter.split(' ')[0]
- paramName = parameter.split(' ')[1]
-
- paramIndex += 1
-
- return functions
-
-
-
-if __name__ == "__main__":
- definedFunctions = []
- lines = open("gl2_api_annotated.in").readlines()
- definedFunctions = append_functions(definedFunctions, lines)
-
- output = open("../debug.in", "w")
- lines = open("../trace.in").readlines()
- output.write("// the following functions are not defined in GLESv2_dbg\n")
- for line in lines:
- functionName = ""
- if line.find("TRACE_GL(") >= 0: # a function prototype
- functionName = line.split(',')[1].strip()
- elif line.find("TRACE_GL_VOID(") >= 0: # a function prototype
- functionName = line[line.find("(") + 1: line.find(",")] #extract GL function name
- else:
- continue
- if functionName in definedFunctions:
- #print functionName
- continue
- else:
- output.write(line)
-
diff --git a/opengl/libs/GLES2_dbg/generate_debugger_message_proto.py b/opengl/libs/GLES2_dbg/generate_debugger_message_proto.py
deleted file mode 100755
index 535b13e..0000000
--- a/opengl/libs/GLES2_dbg/generate_debugger_message_proto.py
+++ /dev/null
@@ -1,155 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-#
-# Copyright 2011, The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import os
-
-def generate_egl_entries(output, lines, i):
- for line in lines:
- if line.find("EGL_ENTRY(") >= 0:
- line = line.split(",")[1].strip() #extract EGL function name
- output.write(" %s = %d;\n" % (line, i))
- i += 1
- return i
-
-
-def generate_gl_entries(output,lines,i):
- for line in lines:
- if line.find("API_ENTRY(") >= 0:
- line = line[line.find("(") + 1: line.find(")")] #extract GL function name
- output.write(" %s = %d;\n" % (line, i))
- i += 1
- return i
-
-
-if __name__ == "__main__":
- output = open("debugger_message.proto",'w')
- output.write("""\
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// do not edit; auto generated by generate_debugger_message_proto.py
-
-package com.android.glesv2debugger;
-
-option optimize_for = LITE_RUNTIME;
-
-message Message
-{
- required int32 context_id = 1; // GL context id
- enum Function
- {
-""")
-
- i = 0;
-
- lines = open("gl2_api_annotated.in").readlines()
- i = generate_gl_entries(output, lines, i)
- output.write(" // end of GL functions\n")
-
- #lines = open("gl2ext_api.in").readlines()
- #i = generate_gl_entries(output, lines, i)
- #output.write(" // end of GL EXT functions\n")
-
- lines = open("../EGL/egl_entries.in").readlines()
- i = generate_egl_entries(output, lines, i)
- output.write(" // end of GL EXT functions\n")
-
- output.write(" ACK = %d;\n" % (i))
- i += 1
-
- output.write(" NEG = %d;\n" % (i))
- i += 1
-
- output.write(" CONTINUE = %d;\n" % (i))
- i += 1
-
- output.write(" SKIP = %d;\n" % (i))
- i += 1
-
- output.write(" SETPROP = %d;\n" % (i))
- i += 1
-
- output.write(""" }
- required Function function = 2 [default = NEG]; // type/function of message
- enum Type
- {
- BeforeCall = 0;
- AfterCall = 1;
- AfterGeneratedCall = 2;
- Response = 3; // currently used for misc messages
- CompleteCall = 4; // BeforeCall and AfterCall merged
- }
- required Type type = 3;
- required bool expect_response = 4;
- optional int32 ret = 5; // return value from previous GL call
- optional int32 arg0 = 6; // args to GL call
- optional int32 arg1 = 7;
- optional int32 arg2 = 8;
- optional int32 arg3 = 9;
- optional int32 arg4 = 16;
- optional int32 arg5 = 17;
- optional int32 arg6 = 18;
- optional int32 arg7 = 19; // glDrawArrays/Elements sets this to active number of attributes
- optional int32 arg8 = 20;
-
- optional bytes data = 10; // variable length data used for GL call
- enum DataType
- {
- ReferencedImage = 0; // for image sourced from ReadPixels
- NonreferencedImage = 1; // for image sourced from ReadPixels
- };
- // most data types can be inferred from function
- optional DataType data_type = 23;
- // these are used for image data when they cannot be determined from args
- optional int32 pixel_format = 24;
- optional int32 pixel_type = 25;
- optional int32 image_width = 26;
- optional int32 image_height = 27;
-
- optional float time = 11; // duration of previous GL call (ms)
- enum Prop
- {
- CaptureDraw = 0; // arg0 = number of glDrawArrays/Elements to glReadPixels
- TimeMode = 1; // arg0 = SYSTEM_TIME_* in utils/Timers.h
- ExpectResponse = 2; // arg0 = enum Function, arg1 = true/false
- CaptureSwap = 3; // arg0 = number of eglSwapBuffers to glReadPixels
- GLConstant = 4; // arg0 = GLenum, arg1 = constant; send GL impl. constants
- };
- optional Prop prop = 21; // used with SETPROP, value in arg0
- optional float clock = 22; // wall clock in seconds
-}
-""")
-
- output.close()
-
- os.system("aprotoc --cpp_out=src --java_out=../../../../../development/tools/glesv2debugger/src debugger_message.proto")
- os.system('mv -f "src/debugger_message.pb.cc" "src/debugger_message.pb.cpp"')
diff --git a/opengl/libs/GLES2_dbg/gl2_api_annotated.in b/opengl/libs/GLES2_dbg/gl2_api_annotated.in
deleted file mode 100644
index 227e2eb..0000000
--- a/opengl/libs/GLES2_dbg/gl2_api_annotated.in
+++ /dev/null
@@ -1,426 +0,0 @@
-void API_ENTRY(glActiveTexture)(GLenum texture) {
- CALL_GL_API(glActiveTexture, texture);
-}
-void API_ENTRY(glAttachShader)(GLuint program, GLuint shader) {
- CALL_GL_API(glAttachShader, program, shader);
-}
-void API_ENTRY(glBindAttribLocation)(GLuint program, GLuint index, const GLchar:GLstring:in name) {
- CALL_GL_API(glBindAttribLocation, program, index, name);
-}
-void API_ENTRY(glBindBuffer)(GLenum target, GLuint buffer) {
- CALL_GL_API(glBindBuffer, target, buffer);
-}
-void API_ENTRY(glBindFramebuffer)(GLenum target, GLuint framebuffer) {
- CALL_GL_API(glBindFramebuffer, target, framebuffer);
-}
-void API_ENTRY(glBindRenderbuffer)(GLenum target, GLuint renderbuffer) {
- CALL_GL_API(glBindRenderbuffer, target, renderbuffer);
-}
-void API_ENTRY(glBindTexture)(GLenum target, GLuint texture) {
- CALL_GL_API(glBindTexture, target, texture);
-}
-void API_ENTRY(glBlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
- CALL_GL_API(glBlendColor, red, green, blue, alpha);
-}
-void API_ENTRY(glBlendEquation)( GLenum mode ) {
- CALL_GL_API(glBlendEquation, mode);
-}
-void API_ENTRY(glBlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha) {
- CALL_GL_API(glBlendEquationSeparate, modeRGB, modeAlpha);
-}
-void API_ENTRY(glBlendFunc)(GLenum sfactor, GLenum dfactor) {
- CALL_GL_API(glBlendFunc, sfactor, dfactor);
-}
-void API_ENTRY(glBlendFuncSeparate)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
- CALL_GL_API(glBlendFuncSeparate, srcRGB, dstRGB, srcAlpha, dstAlpha);
-}
-void API_ENTRY(glBufferData)(GLenum target, GLsizeiptr size, const GLvoid:size:in data, GLenum usage) {
- CALL_GL_API(glBufferData, target, size, data, usage);
-}
-void API_ENTRY(glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid:size:in data) {
- CALL_GL_API(glBufferSubData, target, offset, size, data);
-}
-GLenum API_ENTRY(glCheckFramebufferStatus)(GLenum target) {
- CALL_GL_API_RETURN(glCheckFramebufferStatus, target);
-}
-void API_ENTRY(glClear)(GLbitfield mask) {
- CALL_GL_API(glClear, mask);
-}
-void API_ENTRY(glClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
- CALL_GL_API(glClearColor, red, green, blue, alpha);
-}
-void API_ENTRY(glClearDepthf)(GLclampf depth) {
- CALL_GL_API(glClearDepthf, depth);
-}
-void API_ENTRY(glClearStencil)(GLint s) {
- CALL_GL_API(glClearStencil, s);
-}
-void API_ENTRY(glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
- CALL_GL_API(glColorMask, red, green, blue, alpha);
-}
-void API_ENTRY(glCompileShader)(GLuint shader) {
- CALL_GL_API(glCompileShader, shader);
-}
-void API_ENTRY(glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) {
- CALL_GL_API(glCompressedTexImage2D, target, level, internalformat, width, height, border, imageSize, data);
-}
-void API_ENTRY(glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) {
- CALL_GL_API(glCompressedTexSubImage2D, target, level, xoffset, yoffset, width, height, format, imageSize, data);
-}
-void API_ENTRY(glCopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {
- CALL_GL_API(glCopyTexImage2D, target, level, internalformat, x, y, width, height, border);
-}
-void API_ENTRY(glCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
- CALL_GL_API(glCopyTexSubImage2D, target, level, xoffset, yoffset, x, y, width, height);
-}
-GLuint API_ENTRY(glCreateProgram)(void) {
- CALL_GL_API_RETURN(glCreateProgram);
-}
-GLuint API_ENTRY(glCreateShader)(GLenum type) {
- CALL_GL_API_RETURN(glCreateShader, type);
-}
-void API_ENTRY(glCullFace)(GLenum mode) {
- CALL_GL_API(glCullFace, mode);
-}
-void API_ENTRY(glDeleteBuffers)(GLsizei n, const GLuint:n:in buffers) {
- CALL_GL_API(glDeleteBuffers, n, buffers);
-}
-void API_ENTRY(glDeleteFramebuffers)(GLsizei n, const GLuint:n:in framebuffers) {
- CALL_GL_API(glDeleteFramebuffers, n, framebuffers);
-}
-void API_ENTRY(glDeleteProgram)(GLuint program) {
- CALL_GL_API(glDeleteProgram, program);
-}
-void API_ENTRY(glDeleteRenderbuffers)(GLsizei n, const GLuint:n:in renderbuffers) {
- CALL_GL_API(glDeleteRenderbuffers, n, renderbuffers);
-}
-void API_ENTRY(glDeleteShader)(GLuint shader) {
- CALL_GL_API(glDeleteShader, shader);
-}
-void API_ENTRY(glDeleteTextures)(GLsizei n, const GLuint:n:in textures) {
- CALL_GL_API(glDeleteTextures, n, textures);
-}
-void API_ENTRY(glDepthFunc)(GLenum func) {
- CALL_GL_API(glDepthFunc, func);
-}
-void API_ENTRY(glDepthMask)(GLboolean flag) {
- CALL_GL_API(glDepthMask, flag);
-}
-void API_ENTRY(glDepthRangef)(GLclampf zNear, GLclampf zFar) {
- CALL_GL_API(glDepthRangef, zNear, zFar);
-}
-void API_ENTRY(glDetachShader)(GLuint program, GLuint shader) {
- CALL_GL_API(glDetachShader, program, shader);
-}
-void API_ENTRY(glDisable)(GLenum cap) {
- CALL_GL_API(glDisable, cap);
-}
-void API_ENTRY(glDisableVertexAttribArray)(GLuint index) {
- CALL_GL_API(glDisableVertexAttribArray, index);
-}
-void API_ENTRY(glDrawArrays)(GLenum mode, GLint first, GLsizei count) {
- CALL_GL_API(glDrawArrays, mode, first, count);
-}
-void API_ENTRY(glDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices) {
- CALL_GL_API(glDrawElements, mode, count, type, indices);
-}
-void API_ENTRY(glEnable)(GLenum cap) {
- CALL_GL_API(glEnable, cap);
-}
-void API_ENTRY(glEnableVertexAttribArray)(GLuint index) {
- CALL_GL_API(glEnableVertexAttribArray, index);
-}
-void API_ENTRY(glFinish)(void) {
- CALL_GL_API(glFinish);
-}
-void API_ENTRY(glFlush)(void) {
- CALL_GL_API(glFlush);
-}
-void API_ENTRY(glFramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {
- CALL_GL_API(glFramebufferRenderbuffer, target, attachment, renderbuffertarget, renderbuffer);
-}
-void API_ENTRY(glFramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {
- CALL_GL_API(glFramebufferTexture2D, target, attachment, textarget, texture, level);
-}
-void API_ENTRY(glFrontFace)(GLenum mode) {
- CALL_GL_API(glFrontFace, mode);
-}
-void API_ENTRY(glGenBuffers)(GLsizei n, GLuint:n:out buffers) {
- CALL_GL_API(glGenBuffers, n, buffers);
-}
-void API_ENTRY(glGenerateMipmap)(GLenum target) {
- CALL_GL_API(glGenerateMipmap, target);
-}
-void API_ENTRY(glGenFramebuffers)(GLsizei n, GLuint:n:out framebuffers) {
- CALL_GL_API(glGenFramebuffers, n, framebuffers);
-}
-void API_ENTRY(glGenRenderbuffers)(GLsizei n, GLuint:n:out renderbuffers) {
- CALL_GL_API(glGenRenderbuffers, n, renderbuffers);
-}
-void API_ENTRY(glGenTextures)(GLsizei n, GLuint:n:out textures) {
- CALL_GL_API(glGenTextures, n, textures);
-}
-void API_ENTRY(glGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar:GLstring:in name) {
- CALL_GL_API(glGetActiveAttrib, program, index, bufsize, length, size, type, name);
-}
-void API_ENTRY(glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar:GLstring:in name) {
- CALL_GL_API(glGetActiveUniform, program, index, bufsize, length, size, type, name);
-}
-void API_ENTRY(glGetAttachedShaders)(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) {
- CALL_GL_API(glGetAttachedShaders, program, maxcount, count, shaders);
-}
-int API_ENTRY(glGetAttribLocation)(GLuint program, const GLchar:GLstring:in name) {
- CALL_GL_API_RETURN(glGetAttribLocation, program, name);
-}
-void API_ENTRY(glGetBooleanv)(GLenum pname, GLboolean* params) {
- CALL_GL_API(glGetBooleanv, pname, params);
-}
-void API_ENTRY(glGetBufferParameteriv)(GLenum target, GLenum pname, GLint* params) {
- CALL_GL_API(glGetBufferParameteriv, target, pname, params);
-}
-GLenum API_ENTRY(glGetError)(void) {
- CALL_GL_API_RETURN(glGetError);
-}
-void API_ENTRY(glGetFloatv)(GLenum pname, GLfloat* params) {
- CALL_GL_API(glGetFloatv, pname, params);
-}
-void API_ENTRY(glGetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint* params) {
- CALL_GL_API(glGetFramebufferAttachmentParameteriv, target, attachment, pname, params);
-}
-void API_ENTRY(glGetIntegerv)(GLenum pname, GLint* params) {
- CALL_GL_API(glGetIntegerv, pname, params);
-}
-void API_ENTRY(glGetProgramiv)(GLuint program, GLenum pname, GLint:1:out params) {
- CALL_GL_API(glGetProgramiv, program, pname, params);
-}
-void API_ENTRY(glGetProgramInfoLog)(GLuint program, GLsizei bufsize, GLsizei* length, GLchar:GLstring:out infolog) {
- CALL_GL_API(glGetProgramInfoLog, program, bufsize, length, infolog);
-}
-void API_ENTRY(glGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint* params) {
- CALL_GL_API(glGetRenderbufferParameteriv, target, pname, params);
-}
-void API_ENTRY(glGetShaderiv)(GLuint shader, GLenum pname, GLint:1:out params) {
- CALL_GL_API(glGetShaderiv, shader, pname, params);
-}
-void API_ENTRY(glGetShaderInfoLog)(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar:GLstring:out infolog) {
- CALL_GL_API(glGetShaderInfoLog, shader, bufsize, length, infolog);
-}
-void API_ENTRY(glGetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) {
- CALL_GL_API(glGetShaderPrecisionFormat, shadertype, precisiontype, range, precision);
-}
-void API_ENTRY(glGetShaderSource)(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar:GLstring:out source) {
- CALL_GL_API(glGetShaderSource, shader, bufsize, length, source);
-}
-const GLubyte* API_ENTRY(glGetString)(GLenum name) {
- CALL_GL_API_RETURN(glGetString, name);
-}
-void API_ENTRY(glGetTexParameterfv)(GLenum target, GLenum pname, GLfloat* params) {
- CALL_GL_API(glGetTexParameterfv, target, pname, params);
-}
-void API_ENTRY(glGetTexParameteriv)(GLenum target, GLenum pname, GLint* params) {
- CALL_GL_API(glGetTexParameteriv, target, pname, params);
-}
-void API_ENTRY(glGetUniformfv)(GLuint program, GLint location, GLfloat* params) {
- CALL_GL_API(glGetUniformfv, program, location, params);
-}
-void API_ENTRY(glGetUniformiv)(GLuint program, GLint location, GLint* params) {
- CALL_GL_API(glGetUniformiv, program, location, params);
-}
-int API_ENTRY(glGetUniformLocation)(GLuint program, const GLchar:GLstring:in name) {
- CALL_GL_API_RETURN(glGetUniformLocation, program, name);
-}
-void API_ENTRY(glGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat* params) {
- CALL_GL_API(glGetVertexAttribfv, index, pname, params);
-}
-void API_ENTRY(glGetVertexAttribiv)(GLuint index, GLenum pname, GLint* params) {
- CALL_GL_API(glGetVertexAttribiv, index, pname, params);
-}
-void API_ENTRY(glGetVertexAttribPointerv)(GLuint index, GLenum pname, GLvoid** pointer) {
- CALL_GL_API(glGetVertexAttribPointerv, index, pname, pointer);
-}
-void API_ENTRY(glHint)(GLenum target, GLenum mode) {
- CALL_GL_API(glHint, target, mode);
-}
-GLboolean API_ENTRY(glIsBuffer)(GLuint buffer) {
- CALL_GL_API_RETURN(glIsBuffer, buffer);
-}
-GLboolean API_ENTRY(glIsEnabled)(GLenum cap) {
- CALL_GL_API_RETURN(glIsEnabled, cap);
-}
-GLboolean API_ENTRY(glIsFramebuffer)(GLuint framebuffer) {
- CALL_GL_API_RETURN(glIsFramebuffer, framebuffer);
-}
-GLboolean API_ENTRY(glIsProgram)(GLuint program) {
- CALL_GL_API_RETURN(glIsProgram, program);
-}
-GLboolean API_ENTRY(glIsRenderbuffer)(GLuint renderbuffer) {
- CALL_GL_API_RETURN(glIsRenderbuffer, renderbuffer);
-}
-GLboolean API_ENTRY(glIsShader)(GLuint shader) {
- CALL_GL_API_RETURN(glIsShader, shader);
-}
-GLboolean API_ENTRY(glIsTexture)(GLuint texture) {
- CALL_GL_API_RETURN(glIsTexture, texture);
-}
-void API_ENTRY(glLineWidth)(GLfloat width) {
- CALL_GL_API(glLineWidth, width);
-}
-void API_ENTRY(glLinkProgram)(GLuint program) {
- CALL_GL_API(glLinkProgram, program);
-}
-void API_ENTRY(glPixelStorei)(GLenum pname, GLint param) {
- CALL_GL_API(glPixelStorei, pname, param);
-}
-void API_ENTRY(glPolygonOffset)(GLfloat factor, GLfloat units) {
- CALL_GL_API(glPolygonOffset, factor, units);
-}
-void API_ENTRY(glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) {
- CALL_GL_API(glReadPixels, x, y, width, height, format, type, pixels);
-}
-void API_ENTRY(glReleaseShaderCompiler)(void) {
- CALL_GL_API(glReleaseShaderCompiler);
-}
-void API_ENTRY(glRenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {
- CALL_GL_API(glRenderbufferStorage, target, internalformat, width, height);
-}
-void API_ENTRY(glSampleCoverage)(GLclampf value, GLboolean invert) {
- CALL_GL_API(glSampleCoverage, value, invert);
-}
-void API_ENTRY(glScissor)(GLint x, GLint y, GLsizei width, GLsizei height) {
- CALL_GL_API(glScissor, x, y, width, height);
-}
-void API_ENTRY(glShaderBinary)(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length) {
- CALL_GL_API(glShaderBinary, n, shaders, binaryformat, binary, length);
-}
-void API_ENTRY(glShaderSource)(GLuint shader, GLsizei count, const GLchar** string, const GLint* length) {
- CALL_GL_API(glShaderSource, shader, count, string, length);
-}
-void API_ENTRY(glStencilFunc)(GLenum func, GLint ref, GLuint mask) {
- CALL_GL_API(glStencilFunc, func, ref, mask);
-}
-void API_ENTRY(glStencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask) {
- CALL_GL_API(glStencilFuncSeparate, face, func, ref, mask);
-}
-void API_ENTRY(glStencilMask)(GLuint mask) {
- CALL_GL_API(glStencilMask, mask);
-}
-void API_ENTRY(glStencilMaskSeparate)(GLenum face, GLuint mask) {
- CALL_GL_API(glStencilMaskSeparate, face, mask);
-}
-void API_ENTRY(glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass) {
- CALL_GL_API(glStencilOp, fail, zfail, zpass);
-}
-void API_ENTRY(glStencilOpSeparate)(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) {
- CALL_GL_API(glStencilOpSeparate, face, fail, zfail, zpass);
-}
-void API_ENTRY(glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels) {
- CALL_GL_API(glTexImage2D, target, level, internalformat, width, height, border, format, type, pixels);
-}
-void API_ENTRY(glTexParameterf)(GLenum target, GLenum pname, GLfloat param) {
- CALL_GL_API(glTexParameterf, target, pname, param);
-}
-void API_ENTRY(glTexParameterfv)(GLenum target, GLenum pname, const GLfloat* params) {
- CALL_GL_API(glTexParameterfv, target, pname, params);
-}
-void API_ENTRY(glTexParameteri)(GLenum target, GLenum pname, GLint param) {
- CALL_GL_API(glTexParameteri, target, pname, param);
-}
-void API_ENTRY(glTexParameteriv)(GLenum target, GLenum pname, const GLint* params) {
- CALL_GL_API(glTexParameteriv, target, pname, params);
-}
-void API_ENTRY(glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels) {
- CALL_GL_API(glTexSubImage2D, target, level, xoffset, yoffset, width, height, format, type, pixels);
-}
-void API_ENTRY(glUniform1f)(GLint location, GLfloat x) {
- CALL_GL_API(glUniform1f, location, x);
-}
-void API_ENTRY(glUniform1fv)(GLint location, GLsizei count, const GLfloat:1*count:in v) {
- CALL_GL_API(glUniform1fv, location, count, v);
-}
-void API_ENTRY(glUniform1i)(GLint location, GLint x) {
- CALL_GL_API(glUniform1i, location, x);
-}
-void API_ENTRY(glUniform1iv)(GLint location, GLsizei count, const GLint:1*count:in v) {
- CALL_GL_API(glUniform1iv, location, count, v);
-}
-void API_ENTRY(glUniform2f)(GLint location, GLfloat x, GLfloat y) {
- CALL_GL_API(glUniform2f, location, x, y);
-}
-void API_ENTRY(glUniform2fv)(GLint location, GLsizei count, const GLfloat:2*count:in v) {
- CALL_GL_API(glUniform2fv, location, count, v);
-}
-void API_ENTRY(glUniform2i)(GLint location, GLint x, GLint y) {
- CALL_GL_API(glUniform2i, location, x, y);
-}
-void API_ENTRY(glUniform2iv)(GLint location, GLsizei count, const GLint:2*count:in v) {
- CALL_GL_API(glUniform2iv, location, count, v);
-}
-void API_ENTRY(glUniform3f)(GLint location, GLfloat x, GLfloat y, GLfloat z) {
- CALL_GL_API(glUniform3f, location, x, y, z);
-}
-void API_ENTRY(glUniform3fv)(GLint location, GLsizei count, const GLfloat:3*count:in v) {
- CALL_GL_API(glUniform3fv, location, count, v);
-}
-void API_ENTRY(glUniform3i)(GLint location, GLint x, GLint y, GLint z) {
- CALL_GL_API(glUniform3i, location, x, y, z);
-}
-void API_ENTRY(glUniform3iv)(GLint location, GLsizei count, const GLint:3*count:in v) {
- CALL_GL_API(glUniform3iv, location, count, v);
-}
-void API_ENTRY(glUniform4f)(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
- CALL_GL_API(glUniform4f, location, x, y, z, w);
-}
-void API_ENTRY(glUniform4fv)(GLint location, GLsizei count, const GLfloat:4*count:in v) {
- CALL_GL_API(glUniform4fv, location, count, v);
-}
-void API_ENTRY(glUniform4i)(GLint location, GLint x, GLint y, GLint z, GLint w) {
- CALL_GL_API(glUniform4i, location, x, y, z, w);
-}
-void API_ENTRY(glUniform4iv)(GLint location, GLsizei count, const GLint:4*count:in v) {
- CALL_GL_API(glUniform4iv, location, count, v);
-}
-void API_ENTRY(glUniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat:4*count:in value) {
- CALL_GL_API(glUniformMatrix2fv, location, count, transpose, value);
-}
-void API_ENTRY(glUniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat:9*count:in value) {
- CALL_GL_API(glUniformMatrix3fv, location, count, transpose, value);
-}
-void API_ENTRY(glUniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat:16*count:in value) {
- CALL_GL_API(glUniformMatrix4fv, location, count, transpose, value);
-}
-void API_ENTRY(glUseProgram)(GLuint program) {
- CALL_GL_API(glUseProgram, program);
-}
-void API_ENTRY(glValidateProgram)(GLuint program) {
- CALL_GL_API(glValidateProgram, program);
-}
-void API_ENTRY(glVertexAttrib1f)(GLuint indx, GLfloat x) {
- CALL_GL_API(glVertexAttrib1f, indx, x);
-}
-void API_ENTRY(glVertexAttrib1fv)(GLuint indx, const GLfloat:1:in values) {
- CALL_GL_API(glVertexAttrib1fv, indx, values);
-}
-void API_ENTRY(glVertexAttrib2f)(GLuint indx, GLfloat x, GLfloat y) {
- CALL_GL_API(glVertexAttrib2f, indx, x, y);
-}
-void API_ENTRY(glVertexAttrib2fv)(GLuint indx, const GLfloat:2:in values) {
- CALL_GL_API(glVertexAttrib2fv, indx, values);
-}
-void API_ENTRY(glVertexAttrib3f)(GLuint indx, GLfloat x, GLfloat y, GLfloat z) {
- CALL_GL_API(glVertexAttrib3f, indx, x, y, z);
-}
-void API_ENTRY(glVertexAttrib3fv)(GLuint indx, const GLfloat:3:in values) {
- CALL_GL_API(glVertexAttrib3fv, indx, values);
-}
-void API_ENTRY(glVertexAttrib4f)(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
- CALL_GL_API(glVertexAttrib4f, indx, x, y, z, w);
-}
-void API_ENTRY(glVertexAttrib4fv)(GLuint indx, const GLfloat:4:in values) {
- CALL_GL_API(glVertexAttrib4fv, indx, values);
-}
-void API_ENTRY(glVertexAttribPointer)(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr) {
- CALL_GL_API(glVertexAttribPointer, indx, size, type, normalized, stride, ptr);
-}
-void API_ENTRY(glViewport)(GLint x, GLint y, GLsizei width, GLsizei height) {
- CALL_GL_API(glViewport, x, y, width, height);
-}
diff --git a/opengl/libs/GLES2_dbg/src/api.cpp b/opengl/libs/GLES2_dbg/src/api.cpp
deleted file mode 100644
index c483547..0000000
--- a/opengl/libs/GLES2_dbg/src/api.cpp
+++ /dev/null
@@ -1,3540 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-// auto generated by generate_api_cpp.py
-
-#include <utils/Debug.h>
-
-#include "src/header.h"
-#include "src/api.h"
-
-template<typename T> static int ToInt(const T & t)
-{
- COMPILE_TIME_ASSERT_FUNCTION_SCOPE(sizeof(T) == sizeof(int));
- return (int &)t;
-}
-
-void Debug_glActiveTexture(GLenum texture)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum texture;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glActiveTexture(texture);
- return 0;
- }
- } caller;
- caller.texture = texture;
-
- msg.set_arg0(texture);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glActiveTexture);
-}
-
-void Debug_glAttachShader(GLuint program, GLuint shader)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- GLuint shader;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glAttachShader(program, shader);
- return 0;
- }
- } caller;
- caller.program = program;
- caller.shader = shader;
-
- msg.set_arg0(program);
- msg.set_arg1(shader);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glAttachShader);
-}
-
-void Debug_glBindAttribLocation(GLuint program, GLuint index, const GLchar* name)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- GLuint index;
- const GLchar* name;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBindAttribLocation(program, index, name);
- return 0;
- }
- } caller;
- caller.program = program;
- caller.index = index;
- caller.name = name;
-
- msg.set_arg0(program);
- msg.set_arg1(index);
- msg.set_arg2(ToInt(name));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(name), strlen(name) * sizeof(GLchar));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBindAttribLocation);
-}
-
-void Debug_glBindBuffer(GLenum target, GLuint buffer)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLuint buffer;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBindBuffer(target, buffer);
- getDbgContextThreadSpecific()->glBindBuffer(target, buffer);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.buffer = buffer;
-
- msg.set_arg0(target);
- msg.set_arg1(buffer);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBindBuffer);
-}
-
-void Debug_glBindFramebuffer(GLenum target, GLuint framebuffer)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLuint framebuffer;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBindFramebuffer(target, framebuffer);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.framebuffer = framebuffer;
-
- msg.set_arg0(target);
- msg.set_arg1(framebuffer);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBindFramebuffer);
-}
-
-void Debug_glBindRenderbuffer(GLenum target, GLuint renderbuffer)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLuint renderbuffer;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBindRenderbuffer(target, renderbuffer);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.renderbuffer = renderbuffer;
-
- msg.set_arg0(target);
- msg.set_arg1(renderbuffer);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBindRenderbuffer);
-}
-
-void Debug_glBindTexture(GLenum target, GLuint texture)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLuint texture;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBindTexture(target, texture);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.texture = texture;
-
- msg.set_arg0(target);
- msg.set_arg1(texture);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBindTexture);
-}
-
-void Debug_glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLclampf red;
- GLclampf green;
- GLclampf blue;
- GLclampf alpha;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBlendColor(red, green, blue, alpha);
- return 0;
- }
- } caller;
- caller.red = red;
- caller.green = green;
- caller.blue = blue;
- caller.alpha = alpha;
-
- msg.set_arg0(ToInt(red));
- msg.set_arg1(ToInt(green));
- msg.set_arg2(ToInt(blue));
- msg.set_arg3(ToInt(alpha));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBlendColor);
-}
-
-void Debug_glBlendEquation( GLenum mode )
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum mode;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBlendEquation(mode);
- return 0;
- }
- } caller;
- caller.mode = mode;
-
- msg.set_arg0(mode);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBlendEquation);
-}
-
-void Debug_glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum modeRGB;
- GLenum modeAlpha;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBlendEquationSeparate(modeRGB, modeAlpha);
- return 0;
- }
- } caller;
- caller.modeRGB = modeRGB;
- caller.modeAlpha = modeAlpha;
-
- msg.set_arg0(modeRGB);
- msg.set_arg1(modeAlpha);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBlendEquationSeparate);
-}
-
-void Debug_glBlendFunc(GLenum sfactor, GLenum dfactor)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum sfactor;
- GLenum dfactor;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBlendFunc(sfactor, dfactor);
- return 0;
- }
- } caller;
- caller.sfactor = sfactor;
- caller.dfactor = dfactor;
-
- msg.set_arg0(sfactor);
- msg.set_arg1(dfactor);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBlendFunc);
-}
-
-void Debug_glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum srcRGB;
- GLenum dstRGB;
- GLenum srcAlpha;
- GLenum dstAlpha;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
- return 0;
- }
- } caller;
- caller.srcRGB = srcRGB;
- caller.dstRGB = dstRGB;
- caller.srcAlpha = srcAlpha;
- caller.dstAlpha = dstAlpha;
-
- msg.set_arg0(srcRGB);
- msg.set_arg1(dstRGB);
- msg.set_arg2(srcAlpha);
- msg.set_arg3(dstAlpha);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBlendFuncSeparate);
-}
-
-void Debug_glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLsizeiptr size;
- const GLvoid* data;
- GLenum usage;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBufferData(target, size, data, usage);
- getDbgContextThreadSpecific()->glBufferData(target, size, data, usage);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.size = size;
- caller.data = data;
- caller.usage = usage;
-
- msg.set_arg0(target);
- msg.set_arg1(size);
- msg.set_arg2(ToInt(data));
- msg.set_arg3(usage);
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(data), size * sizeof(char));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBufferData);
-}
-
-void Debug_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLintptr offset;
- GLsizeiptr size;
- const GLvoid* data;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glBufferSubData(target, offset, size, data);
- getDbgContextThreadSpecific()->glBufferSubData(target, offset, size, data);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.offset = offset;
- caller.size = size;
- caller.data = data;
-
- msg.set_arg0(target);
- msg.set_arg1(offset);
- msg.set_arg2(size);
- msg.set_arg3(ToInt(data));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(data), size * sizeof(char));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBufferSubData);
-}
-
-GLenum Debug_glCheckFramebufferStatus(GLenum target)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glCheckFramebufferStatus(target));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.target = target;
-
- msg.set_arg0(target);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCheckFramebufferStatus);
- return reinterpret_cast<GLenum>(ret);
-}
-
-void Debug_glClear(GLbitfield mask)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLbitfield mask;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glClear(mask);
- return 0;
- }
- } caller;
- caller.mask = mask;
-
- msg.set_arg0(mask);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glClear);
-}
-
-void Debug_glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLclampf red;
- GLclampf green;
- GLclampf blue;
- GLclampf alpha;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glClearColor(red, green, blue, alpha);
- return 0;
- }
- } caller;
- caller.red = red;
- caller.green = green;
- caller.blue = blue;
- caller.alpha = alpha;
-
- msg.set_arg0(ToInt(red));
- msg.set_arg1(ToInt(green));
- msg.set_arg2(ToInt(blue));
- msg.set_arg3(ToInt(alpha));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glClearColor);
-}
-
-void Debug_glClearDepthf(GLclampf depth)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLclampf depth;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glClearDepthf(depth);
- return 0;
- }
- } caller;
- caller.depth = depth;
-
- msg.set_arg0(ToInt(depth));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glClearDepthf);
-}
-
-void Debug_glClearStencil(GLint s)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint s;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glClearStencil(s);
- return 0;
- }
- } caller;
- caller.s = s;
-
- msg.set_arg0(s);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glClearStencil);
-}
-
-void Debug_glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLboolean red;
- GLboolean green;
- GLboolean blue;
- GLboolean alpha;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glColorMask(red, green, blue, alpha);
- return 0;
- }
- } caller;
- caller.red = red;
- caller.green = green;
- caller.blue = blue;
- caller.alpha = alpha;
-
- msg.set_arg0(red);
- msg.set_arg1(green);
- msg.set_arg2(blue);
- msg.set_arg3(alpha);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glColorMask);
-}
-
-void Debug_glCompileShader(GLuint shader)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint shader;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glCompileShader(shader);
- return 0;
- }
- } caller;
- caller.shader = shader;
-
- msg.set_arg0(shader);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCompileShader);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLint level;
- GLenum internalformat;
- GLsizei width;
- GLsizei height;
- GLint border;
- GLsizei imageSize;
- const GLvoid* data;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.level = level;
- caller.internalformat = internalformat;
- caller.width = width;
- caller.height = height;
- caller.border = border;
- caller.imageSize = imageSize;
- caller.data = data;
-
- msg.set_arg0(target);
- msg.set_arg1(level);
- msg.set_arg2(internalformat);
- msg.set_arg3(width);
- msg.set_arg4(height);
- msg.set_arg5(border);
- msg.set_arg6(imageSize);
- msg.set_arg7(ToInt(data));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCompressedTexImage2D);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLint level;
- GLint xoffset;
- GLint yoffset;
- GLsizei width;
- GLsizei height;
- GLenum format;
- GLsizei imageSize;
- const GLvoid* data;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.level = level;
- caller.xoffset = xoffset;
- caller.yoffset = yoffset;
- caller.width = width;
- caller.height = height;
- caller.format = format;
- caller.imageSize = imageSize;
- caller.data = data;
-
- msg.set_arg0(target);
- msg.set_arg1(level);
- msg.set_arg2(xoffset);
- msg.set_arg3(yoffset);
- msg.set_arg4(width);
- msg.set_arg5(height);
- msg.set_arg6(format);
- msg.set_arg7(imageSize);
- msg.set_arg8(ToInt(data));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCompressedTexSubImage2D);
-}
-
-void Debug_glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLint level;
- GLenum internalformat;
- GLint x;
- GLint y;
- GLsizei width;
- GLsizei height;
- GLint border;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
-#ifdef EXTEND_AFTER_CALL_Debug_glCopyTexImage2D
- EXTEND_AFTER_CALL_Debug_glCopyTexImage2D;
-#endif
- return 0;
- }
- } caller;
- caller.target = target;
- caller.level = level;
- caller.internalformat = internalformat;
- caller.x = x;
- caller.y = y;
- caller.width = width;
- caller.height = height;
- caller.border = border;
-
- msg.set_arg0(target);
- msg.set_arg1(level);
- msg.set_arg2(internalformat);
- msg.set_arg3(x);
- msg.set_arg4(y);
- msg.set_arg5(width);
- msg.set_arg6(height);
- msg.set_arg7(border);
-
-#ifdef EXTEND_Debug_glCopyTexImage2D
- EXTEND_Debug_glCopyTexImage2D;
-#endif
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCopyTexImage2D);
-}
-
-void Debug_glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLint level;
- GLint xoffset;
- GLint yoffset;
- GLint x;
- GLint y;
- GLsizei width;
- GLsizei height;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
-#ifdef EXTEND_AFTER_CALL_Debug_glCopyTexSubImage2D
- EXTEND_AFTER_CALL_Debug_glCopyTexSubImage2D;
-#endif
- return 0;
- }
- } caller;
- caller.target = target;
- caller.level = level;
- caller.xoffset = xoffset;
- caller.yoffset = yoffset;
- caller.x = x;
- caller.y = y;
- caller.width = width;
- caller.height = height;
-
- msg.set_arg0(target);
- msg.set_arg1(level);
- msg.set_arg2(xoffset);
- msg.set_arg3(yoffset);
- msg.set_arg4(x);
- msg.set_arg5(y);
- msg.set_arg6(width);
- msg.set_arg7(height);
-
-#ifdef EXTEND_Debug_glCopyTexSubImage2D
- EXTEND_Debug_glCopyTexSubImage2D;
-#endif
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCopyTexSubImage2D);
-}
-
-GLuint Debug_glCreateProgram(void)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glCreateProgram());
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
-
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCreateProgram);
- return reinterpret_cast<GLuint>(ret);
-}
-
-GLuint Debug_glCreateShader(GLenum type)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum type;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glCreateShader(type));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.type = type;
-
- msg.set_arg0(type);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCreateShader);
- return reinterpret_cast<GLuint>(ret);
-}
-
-void Debug_glCullFace(GLenum mode)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum mode;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glCullFace(mode);
- return 0;
- }
- } caller;
- caller.mode = mode;
-
- msg.set_arg0(mode);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCullFace);
-}
-
-void Debug_glDeleteBuffers(GLsizei n, const GLuint* buffers)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLsizei n;
- const GLuint* buffers;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDeleteBuffers(n, buffers);
- getDbgContextThreadSpecific()->glDeleteBuffers(n, buffers);
- return 0;
- }
- } caller;
- caller.n = n;
- caller.buffers = buffers;
-
- msg.set_arg0(n);
- msg.set_arg1(ToInt(buffers));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(buffers), n * sizeof(GLuint));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteBuffers);
-}
-
-void Debug_glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLsizei n;
- const GLuint* framebuffers;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDeleteFramebuffers(n, framebuffers);
- return 0;
- }
- } caller;
- caller.n = n;
- caller.framebuffers = framebuffers;
-
- msg.set_arg0(n);
- msg.set_arg1(ToInt(framebuffers));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(framebuffers), n * sizeof(GLuint));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteFramebuffers);
-}
-
-void Debug_glDeleteProgram(GLuint program)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDeleteProgram(program);
- return 0;
- }
- } caller;
- caller.program = program;
-
- msg.set_arg0(program);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteProgram);
-}
-
-void Debug_glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLsizei n;
- const GLuint* renderbuffers;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDeleteRenderbuffers(n, renderbuffers);
- return 0;
- }
- } caller;
- caller.n = n;
- caller.renderbuffers = renderbuffers;
-
- msg.set_arg0(n);
- msg.set_arg1(ToInt(renderbuffers));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(renderbuffers), n * sizeof(GLuint));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteRenderbuffers);
-}
-
-void Debug_glDeleteShader(GLuint shader)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint shader;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDeleteShader(shader);
- return 0;
- }
- } caller;
- caller.shader = shader;
-
- msg.set_arg0(shader);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteShader);
-}
-
-void Debug_glDeleteTextures(GLsizei n, const GLuint* textures)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLsizei n;
- const GLuint* textures;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDeleteTextures(n, textures);
- return 0;
- }
- } caller;
- caller.n = n;
- caller.textures = textures;
-
- msg.set_arg0(n);
- msg.set_arg1(ToInt(textures));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(textures), n * sizeof(GLuint));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteTextures);
-}
-
-void Debug_glDepthFunc(GLenum func)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum func;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDepthFunc(func);
- return 0;
- }
- } caller;
- caller.func = func;
-
- msg.set_arg0(func);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDepthFunc);
-}
-
-void Debug_glDepthMask(GLboolean flag)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLboolean flag;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDepthMask(flag);
- return 0;
- }
- } caller;
- caller.flag = flag;
-
- msg.set_arg0(flag);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDepthMask);
-}
-
-void Debug_glDepthRangef(GLclampf zNear, GLclampf zFar)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLclampf zNear;
- GLclampf zFar;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDepthRangef(zNear, zFar);
- return 0;
- }
- } caller;
- caller.zNear = zNear;
- caller.zFar = zFar;
-
- msg.set_arg0(ToInt(zNear));
- msg.set_arg1(ToInt(zFar));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDepthRangef);
-}
-
-void Debug_glDetachShader(GLuint program, GLuint shader)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- GLuint shader;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDetachShader(program, shader);
- return 0;
- }
- } caller;
- caller.program = program;
- caller.shader = shader;
-
- msg.set_arg0(program);
- msg.set_arg1(shader);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDetachShader);
-}
-
-void Debug_glDisable(GLenum cap)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum cap;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDisable(cap);
- return 0;
- }
- } caller;
- caller.cap = cap;
-
- msg.set_arg0(cap);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDisable);
-}
-
-void Debug_glDisableVertexAttribArray(GLuint index)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint index;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glDisableVertexAttribArray(index);
- getDbgContextThreadSpecific()->glDisableVertexAttribArray(index);
- return 0;
- }
- } caller;
- caller.index = index;
-
- msg.set_arg0(index);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDisableVertexAttribArray);
-}
-
-void Debug_glEnable(GLenum cap)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum cap;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glEnable(cap);
- return 0;
- }
- } caller;
- caller.cap = cap;
-
- msg.set_arg0(cap);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glEnable);
-}
-
-void Debug_glEnableVertexAttribArray(GLuint index)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint index;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glEnableVertexAttribArray(index);
- getDbgContextThreadSpecific()->glEnableVertexAttribArray(index);
- return 0;
- }
- } caller;
- caller.index = index;
-
- msg.set_arg0(index);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glEnableVertexAttribArray);
-}
-
-void Debug_glFinish(void)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glFinish();
- return 0;
- }
- } caller;
-
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glFinish);
-}
-
-void Debug_glFlush(void)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glFlush();
- return 0;
- }
- } caller;
-
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glFlush);
-}
-
-void Debug_glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum attachment;
- GLenum renderbuffertarget;
- GLuint renderbuffer;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.attachment = attachment;
- caller.renderbuffertarget = renderbuffertarget;
- caller.renderbuffer = renderbuffer;
-
- msg.set_arg0(target);
- msg.set_arg1(attachment);
- msg.set_arg2(renderbuffertarget);
- msg.set_arg3(renderbuffer);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glFramebufferRenderbuffer);
-}
-
-void Debug_glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum attachment;
- GLenum textarget;
- GLuint texture;
- GLint level;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glFramebufferTexture2D(target, attachment, textarget, texture, level);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.attachment = attachment;
- caller.textarget = textarget;
- caller.texture = texture;
- caller.level = level;
-
- msg.set_arg0(target);
- msg.set_arg1(attachment);
- msg.set_arg2(textarget);
- msg.set_arg3(texture);
- msg.set_arg4(level);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glFramebufferTexture2D);
-}
-
-void Debug_glFrontFace(GLenum mode)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum mode;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glFrontFace(mode);
- return 0;
- }
- } caller;
- caller.mode = mode;
-
- msg.set_arg0(mode);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glFrontFace);
-}
-
-void Debug_glGenBuffers(GLsizei n, GLuint* buffers)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLsizei n;
- GLuint* buffers;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- nsecs_t c0 = systemTime(timeMode);
- _c->glGenBuffers(n, buffers);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.mutable_data()->assign(reinterpret_cast<const char *>(buffers), n * sizeof(GLuint));
- return 0;
- }
- } caller;
- caller.n = n;
- caller.buffers = buffers;
-
- msg.set_arg0(n);
- msg.set_arg1(ToInt(buffers));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGenBuffers);
-}
-
-void Debug_glGenerateMipmap(GLenum target)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGenerateMipmap(target);
- return 0;
- }
- } caller;
- caller.target = target;
-
- msg.set_arg0(target);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGenerateMipmap);
-}
-
-void Debug_glGenFramebuffers(GLsizei n, GLuint* framebuffers)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLsizei n;
- GLuint* framebuffers;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- nsecs_t c0 = systemTime(timeMode);
- _c->glGenFramebuffers(n, framebuffers);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.mutable_data()->assign(reinterpret_cast<const char *>(framebuffers), n * sizeof(GLuint));
- return 0;
- }
- } caller;
- caller.n = n;
- caller.framebuffers = framebuffers;
-
- msg.set_arg0(n);
- msg.set_arg1(ToInt(framebuffers));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGenFramebuffers);
-}
-
-void Debug_glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLsizei n;
- GLuint* renderbuffers;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- nsecs_t c0 = systemTime(timeMode);
- _c->glGenRenderbuffers(n, renderbuffers);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.mutable_data()->assign(reinterpret_cast<const char *>(renderbuffers), n * sizeof(GLuint));
- return 0;
- }
- } caller;
- caller.n = n;
- caller.renderbuffers = renderbuffers;
-
- msg.set_arg0(n);
- msg.set_arg1(ToInt(renderbuffers));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGenRenderbuffers);
-}
-
-void Debug_glGenTextures(GLsizei n, GLuint* textures)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLsizei n;
- GLuint* textures;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- nsecs_t c0 = systemTime(timeMode);
- _c->glGenTextures(n, textures);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.mutable_data()->assign(reinterpret_cast<const char *>(textures), n * sizeof(GLuint));
- return 0;
- }
- } caller;
- caller.n = n;
- caller.textures = textures;
-
- msg.set_arg0(n);
- msg.set_arg1(ToInt(textures));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGenTextures);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- GLuint index;
- GLsizei bufsize;
- GLsizei* length;
- GLint* size;
- GLenum* type;
- GLchar* name;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetActiveAttrib(program, index, bufsize, length, size, type, name);
- return 0;
- }
- } caller;
- caller.program = program;
- caller.index = index;
- caller.bufsize = bufsize;
- caller.length = length;
- caller.size = size;
- caller.type = type;
- caller.name = name;
-
- msg.set_arg0(program);
- msg.set_arg1(index);
- msg.set_arg2(bufsize);
- msg.set_arg3(ToInt(length));
- msg.set_arg4(ToInt(size));
- msg.set_arg5(ToInt(type));
- msg.set_arg6(ToInt(name));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(name), strlen(name) * sizeof(GLchar));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetActiveAttrib);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- GLuint index;
- GLsizei bufsize;
- GLsizei* length;
- GLint* size;
- GLenum* type;
- GLchar* name;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetActiveUniform(program, index, bufsize, length, size, type, name);
- return 0;
- }
- } caller;
- caller.program = program;
- caller.index = index;
- caller.bufsize = bufsize;
- caller.length = length;
- caller.size = size;
- caller.type = type;
- caller.name = name;
-
- msg.set_arg0(program);
- msg.set_arg1(index);
- msg.set_arg2(bufsize);
- msg.set_arg3(ToInt(length));
- msg.set_arg4(ToInt(size));
- msg.set_arg5(ToInt(type));
- msg.set_arg6(ToInt(name));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(name), strlen(name) * sizeof(GLchar));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetActiveUniform);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- GLsizei maxcount;
- GLsizei* count;
- GLuint* shaders;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetAttachedShaders(program, maxcount, count, shaders);
- return 0;
- }
- } caller;
- caller.program = program;
- caller.maxcount = maxcount;
- caller.count = count;
- caller.shaders = shaders;
-
- msg.set_arg0(program);
- msg.set_arg1(maxcount);
- msg.set_arg2(ToInt(count));
- msg.set_arg3(ToInt(shaders));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetAttachedShaders);
-}
-
-int Debug_glGetAttribLocation(GLuint program, const GLchar* name)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- const GLchar* name;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glGetAttribLocation(program, name));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.program = program;
- caller.name = name;
-
- msg.set_arg0(program);
- msg.set_arg1(ToInt(name));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(name), strlen(name) * sizeof(GLchar));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetAttribLocation);
- return reinterpret_cast<int>(ret);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetBooleanv(GLenum pname, GLboolean* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum pname;
- GLboolean* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetBooleanv(pname, params);
- return 0;
- }
- } caller;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(pname);
- msg.set_arg1(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetBooleanv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum pname;
- GLint* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetBufferParameteriv(target, pname, params);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(target);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetBufferParameteriv);
-}
-
-GLenum Debug_glGetError(void)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glGetError());
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
-
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetError);
- return reinterpret_cast<GLenum>(ret);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetFloatv(GLenum pname, GLfloat* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum pname;
- GLfloat* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetFloatv(pname, params);
- return 0;
- }
- } caller;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(pname);
- msg.set_arg1(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetFloatv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum attachment;
- GLenum pname;
- GLint* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.attachment = attachment;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(target);
- msg.set_arg1(attachment);
- msg.set_arg2(pname);
- msg.set_arg3(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetFramebufferAttachmentParameteriv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetIntegerv(GLenum pname, GLint* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum pname;
- GLint* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetIntegerv(pname, params);
- return 0;
- }
- } caller;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(pname);
- msg.set_arg1(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetIntegerv);
-}
-
-void Debug_glGetProgramiv(GLuint program, GLenum pname, GLint* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- GLenum pname;
- GLint* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- nsecs_t c0 = systemTime(timeMode);
- _c->glGetProgramiv(program, pname, params);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.mutable_data()->assign(reinterpret_cast<const char *>(params), 1 * sizeof(GLint));
- return 0;
- }
- } caller;
- caller.program = program;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(program);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetProgramiv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- GLsizei bufsize;
- GLsizei* length;
- GLchar* infolog;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- nsecs_t c0 = systemTime(timeMode);
- _c->glGetProgramInfoLog(program, bufsize, length, infolog);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.mutable_data()->assign(reinterpret_cast<const char *>(infolog), strlen(infolog) * sizeof(GLchar));
- return 0;
- }
- } caller;
- caller.program = program;
- caller.bufsize = bufsize;
- caller.length = length;
- caller.infolog = infolog;
-
- msg.set_arg0(program);
- msg.set_arg1(bufsize);
- msg.set_arg2(ToInt(length));
- msg.set_arg3(ToInt(infolog));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetProgramInfoLog);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum pname;
- GLint* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetRenderbufferParameteriv(target, pname, params);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(target);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetRenderbufferParameteriv);
-}
-
-void Debug_glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint shader;
- GLenum pname;
- GLint* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- nsecs_t c0 = systemTime(timeMode);
- _c->glGetShaderiv(shader, pname, params);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.mutable_data()->assign(reinterpret_cast<const char *>(params), 1 * sizeof(GLint));
- return 0;
- }
- } caller;
- caller.shader = shader;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(shader);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetShaderiv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint shader;
- GLsizei bufsize;
- GLsizei* length;
- GLchar* infolog;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- nsecs_t c0 = systemTime(timeMode);
- _c->glGetShaderInfoLog(shader, bufsize, length, infolog);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.mutable_data()->assign(reinterpret_cast<const char *>(infolog), strlen(infolog) * sizeof(GLchar));
- return 0;
- }
- } caller;
- caller.shader = shader;
- caller.bufsize = bufsize;
- caller.length = length;
- caller.infolog = infolog;
-
- msg.set_arg0(shader);
- msg.set_arg1(bufsize);
- msg.set_arg2(ToInt(length));
- msg.set_arg3(ToInt(infolog));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetShaderInfoLog);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum shadertype;
- GLenum precisiontype;
- GLint* range;
- GLint* precision;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
- return 0;
- }
- } caller;
- caller.shadertype = shadertype;
- caller.precisiontype = precisiontype;
- caller.range = range;
- caller.precision = precision;
-
- msg.set_arg0(shadertype);
- msg.set_arg1(precisiontype);
- msg.set_arg2(ToInt(range));
- msg.set_arg3(ToInt(precision));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetShaderPrecisionFormat);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint shader;
- GLsizei bufsize;
- GLsizei* length;
- GLchar* source;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- nsecs_t c0 = systemTime(timeMode);
- _c->glGetShaderSource(shader, bufsize, length, source);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.mutable_data()->assign(reinterpret_cast<const char *>(source), strlen(source) * sizeof(GLchar));
- return 0;
- }
- } caller;
- caller.shader = shader;
- caller.bufsize = bufsize;
- caller.length = length;
- caller.source = source;
-
- msg.set_arg0(shader);
- msg.set_arg1(bufsize);
- msg.set_arg2(ToInt(length));
- msg.set_arg3(ToInt(source));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetShaderSource);
-}
-
-// FIXME: this function has pointers, it should be hand written
-const GLubyte* Debug_glGetString(GLenum name)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum name;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glGetString(name));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.name = name;
-
- msg.set_arg0(name);
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetString);
- return reinterpret_cast<const GLubyte*>(ret);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum pname;
- GLfloat* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetTexParameterfv(target, pname, params);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(target);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetTexParameterfv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum pname;
- GLint* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetTexParameteriv(target, pname, params);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(target);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetTexParameteriv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetUniformfv(GLuint program, GLint location, GLfloat* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- GLint location;
- GLfloat* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetUniformfv(program, location, params);
- return 0;
- }
- } caller;
- caller.program = program;
- caller.location = location;
- caller.params = params;
-
- msg.set_arg0(program);
- msg.set_arg1(location);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetUniformfv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetUniformiv(GLuint program, GLint location, GLint* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- GLint location;
- GLint* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetUniformiv(program, location, params);
- return 0;
- }
- } caller;
- caller.program = program;
- caller.location = location;
- caller.params = params;
-
- msg.set_arg0(program);
- msg.set_arg1(location);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetUniformiv);
-}
-
-int Debug_glGetUniformLocation(GLuint program, const GLchar* name)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
- const GLchar* name;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glGetUniformLocation(program, name));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.program = program;
- caller.name = name;
-
- msg.set_arg0(program);
- msg.set_arg1(ToInt(name));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(name), strlen(name) * sizeof(GLchar));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetUniformLocation);
- return reinterpret_cast<int>(ret);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint index;
- GLenum pname;
- GLfloat* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetVertexAttribfv(index, pname, params);
- return 0;
- }
- } caller;
- caller.index = index;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(index);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetVertexAttribfv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint index;
- GLenum pname;
- GLint* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetVertexAttribiv(index, pname, params);
- return 0;
- }
- } caller;
- caller.index = index;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(index);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetVertexAttribiv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint index;
- GLenum pname;
- GLvoid** pointer;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glGetVertexAttribPointerv(index, pname, pointer);
- return 0;
- }
- } caller;
- caller.index = index;
- caller.pname = pname;
- caller.pointer = pointer;
-
- msg.set_arg0(index);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(pointer));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetVertexAttribPointerv);
-}
-
-void Debug_glHint(GLenum target, GLenum mode)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum mode;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glHint(target, mode);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.mode = mode;
-
- msg.set_arg0(target);
- msg.set_arg1(mode);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glHint);
-}
-
-GLboolean Debug_glIsBuffer(GLuint buffer)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint buffer;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glIsBuffer(buffer));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.buffer = buffer;
-
- msg.set_arg0(buffer);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsBuffer);
- return static_cast<GLboolean>(reinterpret_cast<int>(ret));
-}
-
-GLboolean Debug_glIsEnabled(GLenum cap)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum cap;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glIsEnabled(cap));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.cap = cap;
-
- msg.set_arg0(cap);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsEnabled);
- return static_cast<GLboolean>(reinterpret_cast<int>(ret));
-}
-
-GLboolean Debug_glIsFramebuffer(GLuint framebuffer)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint framebuffer;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glIsFramebuffer(framebuffer));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.framebuffer = framebuffer;
-
- msg.set_arg0(framebuffer);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsFramebuffer);
- return static_cast<GLboolean>(reinterpret_cast<int>(ret));
-}
-
-GLboolean Debug_glIsProgram(GLuint program)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glIsProgram(program));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.program = program;
-
- msg.set_arg0(program);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsProgram);
- return static_cast<GLboolean>(reinterpret_cast<int>(ret));
-}
-
-GLboolean Debug_glIsRenderbuffer(GLuint renderbuffer)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint renderbuffer;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glIsRenderbuffer(renderbuffer));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.renderbuffer = renderbuffer;
-
- msg.set_arg0(renderbuffer);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsRenderbuffer);
- return static_cast<GLboolean>(reinterpret_cast<int>(ret));
-}
-
-GLboolean Debug_glIsShader(GLuint shader)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint shader;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glIsShader(shader));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.shader = shader;
-
- msg.set_arg0(shader);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsShader);
- return static_cast<GLboolean>(reinterpret_cast<int>(ret));
-}
-
-GLboolean Debug_glIsTexture(GLuint texture)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint texture;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int * ret = reinterpret_cast<const int *>(_c->glIsTexture(texture));
- msg.set_ret(ToInt(ret));
- return ret;
- }
- } caller;
- caller.texture = texture;
-
- msg.set_arg0(texture);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsTexture);
- return static_cast<GLboolean>(reinterpret_cast<int>(ret));
-}
-
-void Debug_glLineWidth(GLfloat width)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLfloat width;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glLineWidth(width);
- return 0;
- }
- } caller;
- caller.width = width;
-
- msg.set_arg0(ToInt(width));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glLineWidth);
-}
-
-void Debug_glLinkProgram(GLuint program)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glLinkProgram(program);
- return 0;
- }
- } caller;
- caller.program = program;
-
- msg.set_arg0(program);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glLinkProgram);
-}
-
-void Debug_glPixelStorei(GLenum pname, GLint param)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum pname;
- GLint param;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glPixelStorei(pname, param);
- return 0;
- }
- } caller;
- caller.pname = pname;
- caller.param = param;
-
- msg.set_arg0(pname);
- msg.set_arg1(param);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glPixelStorei);
-}
-
-void Debug_glPolygonOffset(GLfloat factor, GLfloat units)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLfloat factor;
- GLfloat units;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glPolygonOffset(factor, units);
- return 0;
- }
- } caller;
- caller.factor = factor;
- caller.units = units;
-
- msg.set_arg0(ToInt(factor));
- msg.set_arg1(ToInt(units));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glPolygonOffset);
-}
-
-void Debug_glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint x;
- GLint y;
- GLsizei width;
- GLsizei height;
- GLenum format;
- GLenum type;
- GLvoid* pixels;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glReadPixels(x, y, width, height, format, type, pixels);
-#ifdef EXTEND_AFTER_CALL_Debug_glReadPixels
- EXTEND_AFTER_CALL_Debug_glReadPixels;
-#endif
- return 0;
- }
- } caller;
- caller.x = x;
- caller.y = y;
- caller.width = width;
- caller.height = height;
- caller.format = format;
- caller.type = type;
- caller.pixels = pixels;
-
- msg.set_arg0(x);
- msg.set_arg1(y);
- msg.set_arg2(width);
- msg.set_arg3(height);
- msg.set_arg4(format);
- msg.set_arg5(type);
- msg.set_arg6(ToInt(pixels));
-
- // FIXME: check for pointer usage
-#ifdef EXTEND_Debug_glReadPixels
- EXTEND_Debug_glReadPixels;
-#endif
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glReadPixels);
-}
-
-void Debug_glReleaseShaderCompiler(void)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glReleaseShaderCompiler();
- return 0;
- }
- } caller;
-
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glReleaseShaderCompiler);
-}
-
-void Debug_glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum internalformat;
- GLsizei width;
- GLsizei height;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glRenderbufferStorage(target, internalformat, width, height);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.internalformat = internalformat;
- caller.width = width;
- caller.height = height;
-
- msg.set_arg0(target);
- msg.set_arg1(internalformat);
- msg.set_arg2(width);
- msg.set_arg3(height);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glRenderbufferStorage);
-}
-
-void Debug_glSampleCoverage(GLclampf value, GLboolean invert)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLclampf value;
- GLboolean invert;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glSampleCoverage(value, invert);
- return 0;
- }
- } caller;
- caller.value = value;
- caller.invert = invert;
-
- msg.set_arg0(ToInt(value));
- msg.set_arg1(invert);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glSampleCoverage);
-}
-
-void Debug_glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint x;
- GLint y;
- GLsizei width;
- GLsizei height;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glScissor(x, y, width, height);
- return 0;
- }
- } caller;
- caller.x = x;
- caller.y = y;
- caller.width = width;
- caller.height = height;
-
- msg.set_arg0(x);
- msg.set_arg1(y);
- msg.set_arg2(width);
- msg.set_arg3(height);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glScissor);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLsizei n;
- const GLuint* shaders;
- GLenum binaryformat;
- const GLvoid* binary;
- GLsizei length;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glShaderBinary(n, shaders, binaryformat, binary, length);
- return 0;
- }
- } caller;
- caller.n = n;
- caller.shaders = shaders;
- caller.binaryformat = binaryformat;
- caller.binary = binary;
- caller.length = length;
-
- msg.set_arg0(n);
- msg.set_arg1(ToInt(shaders));
- msg.set_arg2(binaryformat);
- msg.set_arg3(ToInt(binary));
- msg.set_arg4(length);
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glShaderBinary);
-}
-
-void Debug_glShaderSource(GLuint shader, GLsizei count, const GLchar** string, const GLint* length)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint shader;
- GLsizei count;
- const GLchar** string;
- const GLint* length;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glShaderSource(shader, count, string, length);
-#ifdef EXTEND_AFTER_CALL_Debug_glShaderSource
- EXTEND_AFTER_CALL_Debug_glShaderSource;
-#endif
- return 0;
- }
- } caller;
- caller.shader = shader;
- caller.count = count;
- caller.string = string;
- caller.length = length;
-
- msg.set_arg0(shader);
- msg.set_arg1(count);
- msg.set_arg2(ToInt(string));
- msg.set_arg3(ToInt(length));
-
- // FIXME: check for pointer usage
-#ifdef EXTEND_Debug_glShaderSource
- EXTEND_Debug_glShaderSource;
-#endif
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glShaderSource);
-}
-
-void Debug_glStencilFunc(GLenum func, GLint ref, GLuint mask)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum func;
- GLint ref;
- GLuint mask;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glStencilFunc(func, ref, mask);
- return 0;
- }
- } caller;
- caller.func = func;
- caller.ref = ref;
- caller.mask = mask;
-
- msg.set_arg0(func);
- msg.set_arg1(ref);
- msg.set_arg2(mask);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilFunc);
-}
-
-void Debug_glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum face;
- GLenum func;
- GLint ref;
- GLuint mask;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glStencilFuncSeparate(face, func, ref, mask);
- return 0;
- }
- } caller;
- caller.face = face;
- caller.func = func;
- caller.ref = ref;
- caller.mask = mask;
-
- msg.set_arg0(face);
- msg.set_arg1(func);
- msg.set_arg2(ref);
- msg.set_arg3(mask);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilFuncSeparate);
-}
-
-void Debug_glStencilMask(GLuint mask)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint mask;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glStencilMask(mask);
- return 0;
- }
- } caller;
- caller.mask = mask;
-
- msg.set_arg0(mask);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilMask);
-}
-
-void Debug_glStencilMaskSeparate(GLenum face, GLuint mask)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum face;
- GLuint mask;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glStencilMaskSeparate(face, mask);
- return 0;
- }
- } caller;
- caller.face = face;
- caller.mask = mask;
-
- msg.set_arg0(face);
- msg.set_arg1(mask);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilMaskSeparate);
-}
-
-void Debug_glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum fail;
- GLenum zfail;
- GLenum zpass;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glStencilOp(fail, zfail, zpass);
- return 0;
- }
- } caller;
- caller.fail = fail;
- caller.zfail = zfail;
- caller.zpass = zpass;
-
- msg.set_arg0(fail);
- msg.set_arg1(zfail);
- msg.set_arg2(zpass);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilOp);
-}
-
-void Debug_glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum face;
- GLenum fail;
- GLenum zfail;
- GLenum zpass;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glStencilOpSeparate(face, fail, zfail, zpass);
- return 0;
- }
- } caller;
- caller.face = face;
- caller.fail = fail;
- caller.zfail = zfail;
- caller.zpass = zpass;
-
- msg.set_arg0(face);
- msg.set_arg1(fail);
- msg.set_arg2(zfail);
- msg.set_arg3(zpass);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilOpSeparate);
-}
-
-void Debug_glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLint level;
- GLint internalformat;
- GLsizei width;
- GLsizei height;
- GLint border;
- GLenum format;
- GLenum type;
- const GLvoid* pixels;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
-#ifdef EXTEND_AFTER_CALL_Debug_glTexImage2D
- EXTEND_AFTER_CALL_Debug_glTexImage2D;
-#endif
- return 0;
- }
- } caller;
- caller.target = target;
- caller.level = level;
- caller.internalformat = internalformat;
- caller.width = width;
- caller.height = height;
- caller.border = border;
- caller.format = format;
- caller.type = type;
- caller.pixels = pixels;
-
- msg.set_arg0(target);
- msg.set_arg1(level);
- msg.set_arg2(internalformat);
- msg.set_arg3(width);
- msg.set_arg4(height);
- msg.set_arg5(border);
- msg.set_arg6(format);
- msg.set_arg7(type);
- msg.set_arg8(ToInt(pixels));
-
- // FIXME: check for pointer usage
-#ifdef EXTEND_Debug_glTexImage2D
- EXTEND_Debug_glTexImage2D;
-#endif
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexImage2D);
-}
-
-void Debug_glTexParameterf(GLenum target, GLenum pname, GLfloat param)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum pname;
- GLfloat param;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glTexParameterf(target, pname, param);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.pname = pname;
- caller.param = param;
-
- msg.set_arg0(target);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(param));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexParameterf);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum pname;
- const GLfloat* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glTexParameterfv(target, pname, params);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(target);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexParameterfv);
-}
-
-void Debug_glTexParameteri(GLenum target, GLenum pname, GLint param)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum pname;
- GLint param;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glTexParameteri(target, pname, param);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.pname = pname;
- caller.param = param;
-
- msg.set_arg0(target);
- msg.set_arg1(pname);
- msg.set_arg2(param);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexParameteri);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glTexParameteriv(GLenum target, GLenum pname, const GLint* params)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLenum pname;
- const GLint* params;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glTexParameteriv(target, pname, params);
- return 0;
- }
- } caller;
- caller.target = target;
- caller.pname = pname;
- caller.params = params;
-
- msg.set_arg0(target);
- msg.set_arg1(pname);
- msg.set_arg2(ToInt(params));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexParameteriv);
-}
-
-void Debug_glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLenum target;
- GLint level;
- GLint xoffset;
- GLint yoffset;
- GLsizei width;
- GLsizei height;
- GLenum format;
- GLenum type;
- const GLvoid* pixels;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
-#ifdef EXTEND_AFTER_CALL_Debug_glTexSubImage2D
- EXTEND_AFTER_CALL_Debug_glTexSubImage2D;
-#endif
- return 0;
- }
- } caller;
- caller.target = target;
- caller.level = level;
- caller.xoffset = xoffset;
- caller.yoffset = yoffset;
- caller.width = width;
- caller.height = height;
- caller.format = format;
- caller.type = type;
- caller.pixels = pixels;
-
- msg.set_arg0(target);
- msg.set_arg1(level);
- msg.set_arg2(xoffset);
- msg.set_arg3(yoffset);
- msg.set_arg4(width);
- msg.set_arg5(height);
- msg.set_arg6(format);
- msg.set_arg7(type);
- msg.set_arg8(ToInt(pixels));
-
- // FIXME: check for pointer usage
-#ifdef EXTEND_Debug_glTexSubImage2D
- EXTEND_Debug_glTexSubImage2D;
-#endif
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexSubImage2D);
-}
-
-void Debug_glUniform1f(GLint location, GLfloat x)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLfloat x;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform1f(location, x);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.x = x;
-
- msg.set_arg0(location);
- msg.set_arg1(ToInt(x));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform1f);
-}
-
-void Debug_glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- const GLfloat* v;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform1fv(location, count, v);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.v = v;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(ToInt(v));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 1*count * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform1fv);
-}
-
-void Debug_glUniform1i(GLint location, GLint x)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLint x;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform1i(location, x);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.x = x;
-
- msg.set_arg0(location);
- msg.set_arg1(x);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform1i);
-}
-
-void Debug_glUniform1iv(GLint location, GLsizei count, const GLint* v)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- const GLint* v;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform1iv(location, count, v);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.v = v;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(ToInt(v));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 1*count * sizeof(GLint));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform1iv);
-}
-
-void Debug_glUniform2f(GLint location, GLfloat x, GLfloat y)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLfloat x;
- GLfloat y;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform2f(location, x, y);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.x = x;
- caller.y = y;
-
- msg.set_arg0(location);
- msg.set_arg1(ToInt(x));
- msg.set_arg2(ToInt(y));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform2f);
-}
-
-void Debug_glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- const GLfloat* v;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform2fv(location, count, v);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.v = v;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(ToInt(v));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 2*count * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform2fv);
-}
-
-void Debug_glUniform2i(GLint location, GLint x, GLint y)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLint x;
- GLint y;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform2i(location, x, y);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.x = x;
- caller.y = y;
-
- msg.set_arg0(location);
- msg.set_arg1(x);
- msg.set_arg2(y);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform2i);
-}
-
-void Debug_glUniform2iv(GLint location, GLsizei count, const GLint* v)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- const GLint* v;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform2iv(location, count, v);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.v = v;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(ToInt(v));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 2*count * sizeof(GLint));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform2iv);
-}
-
-void Debug_glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLfloat x;
- GLfloat y;
- GLfloat z;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform3f(location, x, y, z);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.x = x;
- caller.y = y;
- caller.z = z;
-
- msg.set_arg0(location);
- msg.set_arg1(ToInt(x));
- msg.set_arg2(ToInt(y));
- msg.set_arg3(ToInt(z));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform3f);
-}
-
-void Debug_glUniform3fv(GLint location, GLsizei count, const GLfloat* v)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- const GLfloat* v;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform3fv(location, count, v);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.v = v;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(ToInt(v));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 3*count * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform3fv);
-}
-
-void Debug_glUniform3i(GLint location, GLint x, GLint y, GLint z)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLint x;
- GLint y;
- GLint z;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform3i(location, x, y, z);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.x = x;
- caller.y = y;
- caller.z = z;
-
- msg.set_arg0(location);
- msg.set_arg1(x);
- msg.set_arg2(y);
- msg.set_arg3(z);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform3i);
-}
-
-void Debug_glUniform3iv(GLint location, GLsizei count, const GLint* v)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- const GLint* v;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform3iv(location, count, v);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.v = v;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(ToInt(v));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 3*count * sizeof(GLint));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform3iv);
-}
-
-void Debug_glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLfloat x;
- GLfloat y;
- GLfloat z;
- GLfloat w;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform4f(location, x, y, z, w);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.x = x;
- caller.y = y;
- caller.z = z;
- caller.w = w;
-
- msg.set_arg0(location);
- msg.set_arg1(ToInt(x));
- msg.set_arg2(ToInt(y));
- msg.set_arg3(ToInt(z));
- msg.set_arg4(ToInt(w));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform4f);
-}
-
-void Debug_glUniform4fv(GLint location, GLsizei count, const GLfloat* v)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- const GLfloat* v;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform4fv(location, count, v);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.v = v;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(ToInt(v));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 4*count * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform4fv);
-}
-
-void Debug_glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLint x;
- GLint y;
- GLint z;
- GLint w;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform4i(location, x, y, z, w);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.x = x;
- caller.y = y;
- caller.z = z;
- caller.w = w;
-
- msg.set_arg0(location);
- msg.set_arg1(x);
- msg.set_arg2(y);
- msg.set_arg3(z);
- msg.set_arg4(w);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform4i);
-}
-
-void Debug_glUniform4iv(GLint location, GLsizei count, const GLint* v)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- const GLint* v;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniform4iv(location, count, v);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.v = v;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(ToInt(v));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 4*count * sizeof(GLint));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform4iv);
-}
-
-void Debug_glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- GLboolean transpose;
- const GLfloat* value;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniformMatrix2fv(location, count, transpose, value);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.transpose = transpose;
- caller.value = value;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(transpose);
- msg.set_arg3(ToInt(value));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(value), 4*count * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniformMatrix2fv);
-}
-
-void Debug_glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- GLboolean transpose;
- const GLfloat* value;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniformMatrix3fv(location, count, transpose, value);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.transpose = transpose;
- caller.value = value;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(transpose);
- msg.set_arg3(ToInt(value));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(value), 9*count * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniformMatrix3fv);
-}
-
-void Debug_glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint location;
- GLsizei count;
- GLboolean transpose;
- const GLfloat* value;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUniformMatrix4fv(location, count, transpose, value);
- return 0;
- }
- } caller;
- caller.location = location;
- caller.count = count;
- caller.transpose = transpose;
- caller.value = value;
-
- msg.set_arg0(location);
- msg.set_arg1(count);
- msg.set_arg2(transpose);
- msg.set_arg3(ToInt(value));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(value), 16*count * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniformMatrix4fv);
-}
-
-void Debug_glUseProgram(GLuint program)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glUseProgram(program);
- getDbgContextThreadSpecific()->glUseProgram(program);
- return 0;
- }
- } caller;
- caller.program = program;
-
- msg.set_arg0(program);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUseProgram);
-}
-
-void Debug_glValidateProgram(GLuint program)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint program;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glValidateProgram(program);
- return 0;
- }
- } caller;
- caller.program = program;
-
- msg.set_arg0(program);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glValidateProgram);
-}
-
-void Debug_glVertexAttrib1f(GLuint indx, GLfloat x)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint indx;
- GLfloat x;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glVertexAttrib1f(indx, x);
- return 0;
- }
- } caller;
- caller.indx = indx;
- caller.x = x;
-
- msg.set_arg0(indx);
- msg.set_arg1(ToInt(x));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib1f);
-}
-
-void Debug_glVertexAttrib1fv(GLuint indx, const GLfloat* values)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint indx;
- const GLfloat* values;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glVertexAttrib1fv(indx, values);
- return 0;
- }
- } caller;
- caller.indx = indx;
- caller.values = values;
-
- msg.set_arg0(indx);
- msg.set_arg1(ToInt(values));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(values), 1 * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib1fv);
-}
-
-void Debug_glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint indx;
- GLfloat x;
- GLfloat y;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glVertexAttrib2f(indx, x, y);
- return 0;
- }
- } caller;
- caller.indx = indx;
- caller.x = x;
- caller.y = y;
-
- msg.set_arg0(indx);
- msg.set_arg1(ToInt(x));
- msg.set_arg2(ToInt(y));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib2f);
-}
-
-void Debug_glVertexAttrib2fv(GLuint indx, const GLfloat* values)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint indx;
- const GLfloat* values;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glVertexAttrib2fv(indx, values);
- return 0;
- }
- } caller;
- caller.indx = indx;
- caller.values = values;
-
- msg.set_arg0(indx);
- msg.set_arg1(ToInt(values));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(values), 2 * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib2fv);
-}
-
-void Debug_glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint indx;
- GLfloat x;
- GLfloat y;
- GLfloat z;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glVertexAttrib3f(indx, x, y, z);
- return 0;
- }
- } caller;
- caller.indx = indx;
- caller.x = x;
- caller.y = y;
- caller.z = z;
-
- msg.set_arg0(indx);
- msg.set_arg1(ToInt(x));
- msg.set_arg2(ToInt(y));
- msg.set_arg3(ToInt(z));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib3f);
-}
-
-void Debug_glVertexAttrib3fv(GLuint indx, const GLfloat* values)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint indx;
- const GLfloat* values;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glVertexAttrib3fv(indx, values);
- return 0;
- }
- } caller;
- caller.indx = indx;
- caller.values = values;
-
- msg.set_arg0(indx);
- msg.set_arg1(ToInt(values));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(values), 3 * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib3fv);
-}
-
-void Debug_glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint indx;
- GLfloat x;
- GLfloat y;
- GLfloat z;
- GLfloat w;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glVertexAttrib4f(indx, x, y, z, w);
- return 0;
- }
- } caller;
- caller.indx = indx;
- caller.x = x;
- caller.y = y;
- caller.z = z;
- caller.w = w;
-
- msg.set_arg0(indx);
- msg.set_arg1(ToInt(x));
- msg.set_arg2(ToInt(y));
- msg.set_arg3(ToInt(z));
- msg.set_arg4(ToInt(w));
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib4f);
-}
-
-void Debug_glVertexAttrib4fv(GLuint indx, const GLfloat* values)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint indx;
- const GLfloat* values;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glVertexAttrib4fv(indx, values);
- return 0;
- }
- } caller;
- caller.indx = indx;
- caller.values = values;
-
- msg.set_arg0(indx);
- msg.set_arg1(ToInt(values));
-
- // FIXME: check for pointer usage
- msg.mutable_data()->assign(reinterpret_cast<const char *>(values), 4 * sizeof(GLfloat));
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib4fv);
-}
-
-// FIXME: this function has pointers, it should be hand written
-void Debug_glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLuint indx;
- GLint size;
- GLenum type;
- GLboolean normalized;
- GLsizei stride;
- const GLvoid* ptr;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
- getDbgContextThreadSpecific()->glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
- return 0;
- }
- } caller;
- caller.indx = indx;
- caller.size = size;
- caller.type = type;
- caller.normalized = normalized;
- caller.stride = stride;
- caller.ptr = ptr;
-
- msg.set_arg0(indx);
- msg.set_arg1(size);
- msg.set_arg2(type);
- msg.set_arg3(normalized);
- msg.set_arg4(stride);
- msg.set_arg5(ToInt(ptr));
-
- // FIXME: check for pointer usage
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttribPointer);
-}
-
-void Debug_glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
-{
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- GLint x;
- GLint y;
- GLsizei width;
- GLsizei height;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- _c->glViewport(x, y, width, height);
- return 0;
- }
- } caller;
- caller.x = x;
- caller.y = y;
- caller.width = width;
- caller.height = height;
-
- msg.set_arg0(x);
- msg.set_arg1(y);
- msg.set_arg2(width);
- msg.set_arg3(height);
-
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glViewport);
-}
-
-// FIXME: the following functions should be written by hand
-void Debug_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data);
-void Debug_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data);
-void Debug_glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
-void Debug_glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
-void Debug_glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
-void Debug_glGetBooleanv(GLenum pname, GLboolean* params);
-void Debug_glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
-void Debug_glGetFloatv(GLenum pname, GLfloat* params);
-void Debug_glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params);
-void Debug_glGetIntegerv(GLenum pname, GLint* params);
-void Debug_glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
-void Debug_glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params);
-void Debug_glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
-void Debug_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
-void Debug_glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
-const GLubyte* Debug_glGetString(GLenum name);
-void Debug_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
-void Debug_glGetTexParameteriv(GLenum target, GLenum pname, GLint* params);
-void Debug_glGetUniformfv(GLuint program, GLint location, GLfloat* params);
-void Debug_glGetUniformiv(GLuint program, GLint location, GLint* params);
-void Debug_glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params);
-void Debug_glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params);
-void Debug_glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer);
-void Debug_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
-void Debug_glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params);
-void Debug_glTexParameteriv(GLenum target, GLenum pname, const GLint* params);
-void Debug_glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
diff --git a/opengl/libs/GLES2_dbg/src/api.h b/opengl/libs/GLES2_dbg/src/api.h
deleted file mode 100644
index 0b227bc..0000000
--- a/opengl/libs/GLES2_dbg/src/api.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-#define EXTEND_Debug_glCopyTexImage2D \
- DbgContext * const dbg = getDbgContextThreadSpecific(); \
- void * readData = dbg->GetReadPixelsBuffer(4 * width * height); \
- /* pick easy format for client to convert */ \
- dbg->hooks->gl.glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, readData); \
- dbg->CompressReadPixelBuffer(msg.mutable_data()); \
- msg.set_data_type(msg.ReferencedImage); \
- msg.set_pixel_format(GL_RGBA); \
- msg.set_pixel_type(GL_UNSIGNED_BYTE);
-
-#define EXTEND_Debug_glCopyTexSubImage2D EXTEND_Debug_glCopyTexImage2D
-
-#define EXTEND_AFTER_CALL_Debug_glReadPixels \
- { \
- DbgContext * const dbg = getDbgContextThreadSpecific(); \
- if (dbg->IsReadPixelBuffer(pixels)) { \
- dbg->CompressReadPixelBuffer(msg.mutable_data()); \
- msg.set_data_type(msg.ReferencedImage); \
- } else { \
- const unsigned int size = width * height * GetBytesPerPixel(format, type); \
- dbg->Compress(pixels, size, msg.mutable_data()); \
- msg.set_data_type(msg.NonreferencedImage); \
- } \
- }
-
-#define EXTEND_Debug_glShaderSource \
- std::string * const data = msg.mutable_data(); \
- for (unsigned i = 0; i < count; i++) \
- if (!length || length[i] < 0) \
- data->append(string[i]); \
- else \
- data->append(string[i], length[i]);
-
-#define EXTEND_Debug_glTexImage2D \
- if (pixels) { \
- DbgContext * const dbg = getDbgContextThreadSpecific(); \
- const unsigned size = GetBytesPerPixel(format, type) * width * height; \
- assert(0 < size); \
- dbg->Compress(pixels, size, msg.mutable_data()); \
- }
-
-#define EXTEND_Debug_glTexSubImage2D EXTEND_Debug_glTexImage2D
diff --git a/opengl/libs/GLES2_dbg/src/caller.cpp b/opengl/libs/GLES2_dbg/src/caller.cpp
deleted file mode 100644
index 70d23d6..0000000
--- a/opengl/libs/GLES2_dbg/src/caller.cpp
+++ /dev/null
@@ -1,778 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-// auto generated by generate_caller_cpp.py
-// implement declarations in caller.h
-
-#include "header.h"
-
-namespace android {
-
-static const int * GenerateCall_glCompressedTexImage2D(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glCompressedTexSubImage2D(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glDrawElements(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGenBuffers(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGenFramebuffers(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGenRenderbuffers(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGenTextures(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetActiveAttrib(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetActiveUniform(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetAttachedShaders(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetBooleanv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetBufferParameteriv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetFloatv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetFramebufferAttachmentParameteriv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetIntegerv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetProgramiv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetProgramInfoLog(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetRenderbufferParameteriv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetShaderiv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetShaderInfoLog(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetShaderPrecisionFormat(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetShaderSource(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetString(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetTexParameterfv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetTexParameteriv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetUniformfv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetUniformiv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetVertexAttribfv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetVertexAttribiv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glGetVertexAttribPointerv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glReadPixels(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glShaderBinary(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glShaderSource(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glTexImage2D(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glTexParameterfv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glTexParameteriv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glTexSubImage2D(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-static const int * GenerateCall_glVertexAttribPointer(DbgContext * const dbg,
- const glesv2debugger::Message & cmd, glesv2debugger::Message & msg, const int * const prevRet);
-
-#include "caller.h"
-
-const int * GenerateCall(DbgContext * const dbg, const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- ALOGD("GenerateCall function=%u", cmd.function());
- const int * ret = prevRet; // only some functions have return value
- nsecs_t c0 = systemTime(timeMode);
- switch (cmd.function()) { case glesv2debugger::Message_Function_glActiveTexture:
- dbg->hooks->gl.glActiveTexture(
- static_cast<GLenum>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glAttachShader:
- dbg->hooks->gl.glAttachShader(
- static_cast<GLuint>(cmd.arg0()), static_cast<GLuint>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glBindAttribLocation:
- dbg->hooks->gl.glBindAttribLocation(
- static_cast<GLuint>(cmd.arg0()), static_cast<GLuint>(cmd.arg1()),
- reinterpret_cast<GLchar*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glBindBuffer:
- dbg->hooks->gl.glBindBuffer(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLuint>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glBindFramebuffer:
- dbg->hooks->gl.glBindFramebuffer(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLuint>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glBindRenderbuffer:
- dbg->hooks->gl.glBindRenderbuffer(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLuint>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glBindTexture:
- dbg->hooks->gl.glBindTexture(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLuint>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glBlendColor:
- dbg->hooks->gl.glBlendColor(
- static_cast<GLclampf>(cmd.arg0()), static_cast<GLclampf>(cmd.arg1()),
- static_cast<GLclampf>(cmd.arg2()), static_cast<GLclampf>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glBlendEquation:
- dbg->hooks->gl.glBlendEquation(
- static_cast<GLenum>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glBlendEquationSeparate:
- dbg->hooks->gl.glBlendEquationSeparate(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glBlendFunc:
- dbg->hooks->gl.glBlendFunc(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glBlendFuncSeparate:
- dbg->hooks->gl.glBlendFuncSeparate(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1()),
- static_cast<GLenum>(cmd.arg2()), static_cast<GLenum>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glBufferData:
- dbg->hooks->gl.glBufferData(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLsizeiptr>(cmd.arg1()),
- reinterpret_cast<GLvoid*>(const_cast<char *>(cmd.data().data())),
- static_cast<GLenum>(cmd.arg3()));
- break;
- case glesv2debugger::Message_Function_glBufferSubData:
- dbg->hooks->gl.glBufferSubData(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLintptr>(cmd.arg1()),
- static_cast<GLsizeiptr>(cmd.arg2()), reinterpret_cast<GLvoid*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glCheckFramebufferStatus:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glCheckFramebufferStatus(
- static_cast<GLenum>(cmd.arg0()))));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glClear:
- dbg->hooks->gl.glClear(
- static_cast<GLbitfield>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glClearColor:
- dbg->hooks->gl.glClearColor(
- static_cast<GLclampf>(cmd.arg0()), static_cast<GLclampf>(cmd.arg1()),
- static_cast<GLclampf>(cmd.arg2()), static_cast<GLclampf>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glClearDepthf:
- dbg->hooks->gl.glClearDepthf(
- static_cast<GLclampf>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glClearStencil:
- dbg->hooks->gl.glClearStencil(
- static_cast<GLint>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glColorMask:
- dbg->hooks->gl.glColorMask(
- GLboolean(cmd.arg0()), GLboolean(cmd.arg1()), GLboolean(cmd.arg2()),
- GLboolean(cmd.arg3()));
- break;
- case glesv2debugger::Message_Function_glCompileShader:
- dbg->hooks->gl.glCompileShader(
- static_cast<GLuint>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glCompressedTexImage2D:
- ret = GenerateCall_glCompressedTexImage2D(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glCompressedTexSubImage2D:
- ret = GenerateCall_glCompressedTexSubImage2D(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glCopyTexImage2D:
- dbg->hooks->gl.glCopyTexImage2D(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLint>(cmd.arg1()),
- static_cast<GLenum>(cmd.arg2()), static_cast<GLint>(cmd.arg3()),
- static_cast<GLint>(cmd.arg4()), static_cast<GLsizei>(cmd.arg5()),
- static_cast<GLsizei>(cmd.arg6()), static_cast<GLint>(cmd.arg7())
- );
- break;
- case glesv2debugger::Message_Function_glCopyTexSubImage2D:
- dbg->hooks->gl.glCopyTexSubImage2D(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLint>(cmd.arg1()),
- static_cast<GLint>(cmd.arg2()), static_cast<GLint>(cmd.arg3()),
- static_cast<GLint>(cmd.arg4()), static_cast<GLint>(cmd.arg5()),
- static_cast<GLsizei>(cmd.arg6()), static_cast<GLsizei>(cmd.arg7())
- );
- break;
- case glesv2debugger::Message_Function_glCreateProgram:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glCreateProgram(
- )));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glCreateShader:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glCreateShader(
- static_cast<GLenum>(cmd.arg0()))));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glCullFace:
- dbg->hooks->gl.glCullFace(
- static_cast<GLenum>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glDeleteBuffers:
- dbg->hooks->gl.glDeleteBuffers(
- static_cast<GLsizei>(cmd.arg0()), reinterpret_cast<GLuint*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glDeleteFramebuffers:
- dbg->hooks->gl.glDeleteFramebuffers(
- static_cast<GLsizei>(cmd.arg0()), reinterpret_cast<GLuint*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glDeleteProgram:
- dbg->hooks->gl.glDeleteProgram(
- static_cast<GLuint>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glDeleteRenderbuffers:
- dbg->hooks->gl.glDeleteRenderbuffers(
- static_cast<GLsizei>(cmd.arg0()), reinterpret_cast<GLuint*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glDeleteShader:
- dbg->hooks->gl.glDeleteShader(
- static_cast<GLuint>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glDeleteTextures:
- dbg->hooks->gl.glDeleteTextures(
- static_cast<GLsizei>(cmd.arg0()), reinterpret_cast<GLuint*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glDepthFunc:
- dbg->hooks->gl.glDepthFunc(
- static_cast<GLenum>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glDepthMask:
- dbg->hooks->gl.glDepthMask(
- GLboolean(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glDepthRangef:
- dbg->hooks->gl.glDepthRangef(
- static_cast<GLclampf>(cmd.arg0()), static_cast<GLclampf>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glDetachShader:
- dbg->hooks->gl.glDetachShader(
- static_cast<GLuint>(cmd.arg0()), static_cast<GLuint>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glDisable:
- dbg->hooks->gl.glDisable(
- static_cast<GLenum>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glDisableVertexAttribArray:
- dbg->hooks->gl.glDisableVertexAttribArray(
- static_cast<GLuint>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glDrawArrays:
- dbg->hooks->gl.glDrawArrays(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLint>(cmd.arg1()),
- static_cast<GLsizei>(cmd.arg2()));
- break;
- case glesv2debugger::Message_Function_glDrawElements:
- ret = GenerateCall_glDrawElements(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glEnable:
- dbg->hooks->gl.glEnable(
- static_cast<GLenum>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glEnableVertexAttribArray:
- dbg->hooks->gl.glEnableVertexAttribArray(
- static_cast<GLuint>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glFinish:
- dbg->hooks->gl.glFinish(
- );
- break;
- case glesv2debugger::Message_Function_glFlush:
- dbg->hooks->gl.glFlush(
- );
- break;
- case glesv2debugger::Message_Function_glFramebufferRenderbuffer:
- dbg->hooks->gl.glFramebufferRenderbuffer(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1()),
- static_cast<GLenum>(cmd.arg2()), static_cast<GLuint>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glFramebufferTexture2D:
- dbg->hooks->gl.glFramebufferTexture2D(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1()),
- static_cast<GLenum>(cmd.arg2()), static_cast<GLuint>(cmd.arg3()),
- static_cast<GLint>(cmd.arg4()));
- break;
- case glesv2debugger::Message_Function_glFrontFace:
- dbg->hooks->gl.glFrontFace(
- static_cast<GLenum>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glGenBuffers:
- ret = GenerateCall_glGenBuffers(dbg, cmd, msg, prevRet);
- break; // annotated output pointers
- case glesv2debugger::Message_Function_glGenerateMipmap:
- dbg->hooks->gl.glGenerateMipmap(
- static_cast<GLenum>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glGenFramebuffers:
- ret = GenerateCall_glGenFramebuffers(dbg, cmd, msg, prevRet);
- break; // annotated output pointers
- case glesv2debugger::Message_Function_glGenRenderbuffers:
- ret = GenerateCall_glGenRenderbuffers(dbg, cmd, msg, prevRet);
- break; // annotated output pointers
- case glesv2debugger::Message_Function_glGenTextures:
- ret = GenerateCall_glGenTextures(dbg, cmd, msg, prevRet);
- break; // annotated output pointers
- case glesv2debugger::Message_Function_glGetActiveAttrib:
- ret = GenerateCall_glGetActiveAttrib(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetActiveUniform:
- ret = GenerateCall_glGetActiveUniform(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetAttachedShaders:
- ret = GenerateCall_glGetAttachedShaders(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetAttribLocation:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glGetAttribLocation(
- static_cast<GLuint>(cmd.arg0()), reinterpret_cast<GLchar*>(const_cast<char *>(cmd.data().data()))
- )));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glGetBooleanv:
- ret = GenerateCall_glGetBooleanv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetBufferParameteriv:
- ret = GenerateCall_glGetBufferParameteriv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetError:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glGetError(
- )));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glGetFloatv:
- ret = GenerateCall_glGetFloatv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetFramebufferAttachmentParameteriv:
- ret = GenerateCall_glGetFramebufferAttachmentParameteriv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetIntegerv:
- ret = GenerateCall_glGetIntegerv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetProgramiv:
- ret = GenerateCall_glGetProgramiv(dbg, cmd, msg, prevRet);
- break; // annotated output pointers
- case glesv2debugger::Message_Function_glGetProgramInfoLog:
- ret = GenerateCall_glGetProgramInfoLog(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetRenderbufferParameteriv:
- ret = GenerateCall_glGetRenderbufferParameteriv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetShaderiv:
- ret = GenerateCall_glGetShaderiv(dbg, cmd, msg, prevRet);
- break; // annotated output pointers
- case glesv2debugger::Message_Function_glGetShaderInfoLog:
- ret = GenerateCall_glGetShaderInfoLog(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetShaderPrecisionFormat:
- ret = GenerateCall_glGetShaderPrecisionFormat(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetShaderSource:
- ret = GenerateCall_glGetShaderSource(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetString:
- ret = GenerateCall_glGetString(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetTexParameterfv:
- ret = GenerateCall_glGetTexParameterfv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetTexParameteriv:
- ret = GenerateCall_glGetTexParameteriv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetUniformfv:
- ret = GenerateCall_glGetUniformfv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetUniformiv:
- ret = GenerateCall_glGetUniformiv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetUniformLocation:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glGetUniformLocation(
- static_cast<GLuint>(cmd.arg0()), reinterpret_cast<GLchar*>(const_cast<char *>(cmd.data().data()))
- )));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glGetVertexAttribfv:
- ret = GenerateCall_glGetVertexAttribfv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetVertexAttribiv:
- ret = GenerateCall_glGetVertexAttribiv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glGetVertexAttribPointerv:
- ret = GenerateCall_glGetVertexAttribPointerv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glHint:
- dbg->hooks->gl.glHint(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glIsBuffer:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glIsBuffer(
- static_cast<GLuint>(cmd.arg0()))));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glIsEnabled:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glIsEnabled(
- static_cast<GLenum>(cmd.arg0()))));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glIsFramebuffer:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glIsFramebuffer(
- static_cast<GLuint>(cmd.arg0()))));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glIsProgram:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glIsProgram(
- static_cast<GLuint>(cmd.arg0()))));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glIsRenderbuffer:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glIsRenderbuffer(
- static_cast<GLuint>(cmd.arg0()))));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glIsShader:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glIsShader(
- static_cast<GLuint>(cmd.arg0()))));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glIsTexture:
- msg.set_ret(static_cast<int>(dbg->hooks->gl.glIsTexture(
- static_cast<GLuint>(cmd.arg0()))));
- if (cmd.has_ret())
- ret = reinterpret_cast<int *>(msg.ret());
- break;
- case glesv2debugger::Message_Function_glLineWidth:
- dbg->hooks->gl.glLineWidth(
- static_cast<GLfloat>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glLinkProgram:
- dbg->hooks->gl.glLinkProgram(
- static_cast<GLuint>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glPixelStorei:
- dbg->hooks->gl.glPixelStorei(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLint>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glPolygonOffset:
- dbg->hooks->gl.glPolygonOffset(
- static_cast<GLfloat>(cmd.arg0()), static_cast<GLfloat>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glReadPixels:
- ret = GenerateCall_glReadPixels(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glReleaseShaderCompiler:
- dbg->hooks->gl.glReleaseShaderCompiler(
- );
- break;
- case glesv2debugger::Message_Function_glRenderbufferStorage:
- dbg->hooks->gl.glRenderbufferStorage(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1()),
- static_cast<GLsizei>(cmd.arg2()), static_cast<GLsizei>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glSampleCoverage:
- dbg->hooks->gl.glSampleCoverage(
- static_cast<GLclampf>(cmd.arg0()), GLboolean(cmd.arg1()));
- break;
- case glesv2debugger::Message_Function_glScissor:
- dbg->hooks->gl.glScissor(
- static_cast<GLint>(cmd.arg0()), static_cast<GLint>(cmd.arg1()),
- static_cast<GLsizei>(cmd.arg2()), static_cast<GLsizei>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glShaderBinary:
- ret = GenerateCall_glShaderBinary(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glShaderSource:
- ret = GenerateCall_glShaderSource(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glStencilFunc:
- dbg->hooks->gl.glStencilFunc(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLint>(cmd.arg1()),
- static_cast<GLuint>(cmd.arg2()));
- break;
- case glesv2debugger::Message_Function_glStencilFuncSeparate:
- dbg->hooks->gl.glStencilFuncSeparate(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1()),
- static_cast<GLint>(cmd.arg2()), static_cast<GLuint>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glStencilMask:
- dbg->hooks->gl.glStencilMask(
- static_cast<GLuint>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glStencilMaskSeparate:
- dbg->hooks->gl.glStencilMaskSeparate(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLuint>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glStencilOp:
- dbg->hooks->gl.glStencilOp(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1()),
- static_cast<GLenum>(cmd.arg2()));
- break;
- case glesv2debugger::Message_Function_glStencilOpSeparate:
- dbg->hooks->gl.glStencilOpSeparate(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1()),
- static_cast<GLenum>(cmd.arg2()), static_cast<GLenum>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glTexImage2D:
- ret = GenerateCall_glTexImage2D(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glTexParameterf:
- dbg->hooks->gl.glTexParameterf(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1()),
- static_cast<GLfloat>(cmd.arg2()));
- break;
- case glesv2debugger::Message_Function_glTexParameterfv:
- ret = GenerateCall_glTexParameterfv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glTexParameteri:
- dbg->hooks->gl.glTexParameteri(
- static_cast<GLenum>(cmd.arg0()), static_cast<GLenum>(cmd.arg1()),
- static_cast<GLint>(cmd.arg2()));
- break;
- case glesv2debugger::Message_Function_glTexParameteriv:
- ret = GenerateCall_glTexParameteriv(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glTexSubImage2D:
- ret = GenerateCall_glTexSubImage2D(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glUniform1f:
- dbg->hooks->gl.glUniform1f(
- static_cast<GLint>(cmd.arg0()), static_cast<GLfloat>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glUniform1fv:
- dbg->hooks->gl.glUniform1fv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUniform1i:
- dbg->hooks->gl.glUniform1i(
- static_cast<GLint>(cmd.arg0()), static_cast<GLint>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glUniform1iv:
- dbg->hooks->gl.glUniform1iv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- reinterpret_cast<GLint*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUniform2f:
- dbg->hooks->gl.glUniform2f(
- static_cast<GLint>(cmd.arg0()), static_cast<GLfloat>(cmd.arg1()),
- static_cast<GLfloat>(cmd.arg2()));
- break;
- case glesv2debugger::Message_Function_glUniform2fv:
- dbg->hooks->gl.glUniform2fv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUniform2i:
- dbg->hooks->gl.glUniform2i(
- static_cast<GLint>(cmd.arg0()), static_cast<GLint>(cmd.arg1()),
- static_cast<GLint>(cmd.arg2()));
- break;
- case glesv2debugger::Message_Function_glUniform2iv:
- dbg->hooks->gl.glUniform2iv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- reinterpret_cast<GLint*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUniform3f:
- dbg->hooks->gl.glUniform3f(
- static_cast<GLint>(cmd.arg0()), static_cast<GLfloat>(cmd.arg1()),
- static_cast<GLfloat>(cmd.arg2()), static_cast<GLfloat>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glUniform3fv:
- dbg->hooks->gl.glUniform3fv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUniform3i:
- dbg->hooks->gl.glUniform3i(
- static_cast<GLint>(cmd.arg0()), static_cast<GLint>(cmd.arg1()),
- static_cast<GLint>(cmd.arg2()), static_cast<GLint>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glUniform3iv:
- dbg->hooks->gl.glUniform3iv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- reinterpret_cast<GLint*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUniform4f:
- dbg->hooks->gl.glUniform4f(
- static_cast<GLint>(cmd.arg0()), static_cast<GLfloat>(cmd.arg1()),
- static_cast<GLfloat>(cmd.arg2()), static_cast<GLfloat>(cmd.arg3()),
- static_cast<GLfloat>(cmd.arg4()));
- break;
- case glesv2debugger::Message_Function_glUniform4fv:
- dbg->hooks->gl.glUniform4fv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUniform4i:
- dbg->hooks->gl.glUniform4i(
- static_cast<GLint>(cmd.arg0()), static_cast<GLint>(cmd.arg1()),
- static_cast<GLint>(cmd.arg2()), static_cast<GLint>(cmd.arg3()),
- static_cast<GLint>(cmd.arg4()));
- break;
- case glesv2debugger::Message_Function_glUniform4iv:
- dbg->hooks->gl.glUniform4iv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- reinterpret_cast<GLint*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUniformMatrix2fv:
- dbg->hooks->gl.glUniformMatrix2fv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- GLboolean(cmd.arg2()), reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUniformMatrix3fv:
- dbg->hooks->gl.glUniformMatrix3fv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- GLboolean(cmd.arg2()), reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUniformMatrix4fv:
- dbg->hooks->gl.glUniformMatrix4fv(
- static_cast<GLint>(cmd.arg0()), static_cast<GLsizei>(cmd.arg1()),
- GLboolean(cmd.arg2()), reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glUseProgram:
- dbg->hooks->gl.glUseProgram(
- static_cast<GLuint>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glValidateProgram:
- dbg->hooks->gl.glValidateProgram(
- static_cast<GLuint>(cmd.arg0()));
- break;
- case glesv2debugger::Message_Function_glVertexAttrib1f:
- dbg->hooks->gl.glVertexAttrib1f(
- static_cast<GLuint>(cmd.arg0()), static_cast<GLfloat>(cmd.arg1())
- );
- break;
- case glesv2debugger::Message_Function_glVertexAttrib1fv:
- dbg->hooks->gl.glVertexAttrib1fv(
- static_cast<GLuint>(cmd.arg0()), reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glVertexAttrib2f:
- dbg->hooks->gl.glVertexAttrib2f(
- static_cast<GLuint>(cmd.arg0()), static_cast<GLfloat>(cmd.arg1()),
- static_cast<GLfloat>(cmd.arg2()));
- break;
- case glesv2debugger::Message_Function_glVertexAttrib2fv:
- dbg->hooks->gl.glVertexAttrib2fv(
- static_cast<GLuint>(cmd.arg0()), reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glVertexAttrib3f:
- dbg->hooks->gl.glVertexAttrib3f(
- static_cast<GLuint>(cmd.arg0()), static_cast<GLfloat>(cmd.arg1()),
- static_cast<GLfloat>(cmd.arg2()), static_cast<GLfloat>(cmd.arg3())
- );
- break;
- case glesv2debugger::Message_Function_glVertexAttrib3fv:
- dbg->hooks->gl.glVertexAttrib3fv(
- static_cast<GLuint>(cmd.arg0()), reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glVertexAttrib4f:
- dbg->hooks->gl.glVertexAttrib4f(
- static_cast<GLuint>(cmd.arg0()), static_cast<GLfloat>(cmd.arg1()),
- static_cast<GLfloat>(cmd.arg2()), static_cast<GLfloat>(cmd.arg3()),
- static_cast<GLfloat>(cmd.arg4()));
- break;
- case glesv2debugger::Message_Function_glVertexAttrib4fv:
- dbg->hooks->gl.glVertexAttrib4fv(
- static_cast<GLuint>(cmd.arg0()), reinterpret_cast<GLfloat*>(const_cast<char *>(cmd.data().data()))
- );
- break;
- case glesv2debugger::Message_Function_glVertexAttribPointer:
- ret = GenerateCall_glVertexAttribPointer(dbg, cmd, msg, prevRet);
- break;
- case glesv2debugger::Message_Function_glViewport:
- dbg->hooks->gl.glViewport(
- static_cast<GLint>(cmd.arg0()), static_cast<GLint>(cmd.arg1()),
- static_cast<GLsizei>(cmd.arg2()), static_cast<GLsizei>(cmd.arg3())
- );
- break;
- default:
- assert(0);
- }
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.set_context_id(reinterpret_cast<int>(dbg));
- msg.set_function(cmd.function());
- msg.set_type(glesv2debugger::Message_Type_AfterGeneratedCall);
- return ret;
-}
-
-}; // name space android {
diff --git a/opengl/libs/GLES2_dbg/src/caller.h b/opengl/libs/GLES2_dbg/src/caller.h
deleted file mode 100644
index e8111b3..0000000
--- a/opengl/libs/GLES2_dbg/src/caller.h
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License")
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-static const int * GenerateCall_glCompressedTexImage2D(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glCompressedTexSubImage2D(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glDrawElements(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGenBuffers(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGenFramebuffers(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGenRenderbuffers(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGenTextures(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetActiveAttrib(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetActiveUniform(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetAttachedShaders(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetBooleanv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetBufferParameteriv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetFloatv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetFramebufferAttachmentParameteriv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetIntegerv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetProgramiv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- GLint params = -1;
- dbg->hooks->gl.glGetProgramiv(cmd.arg0(), cmd.arg1(), ¶ms);
- msg.mutable_data()->append(reinterpret_cast<char *>(¶ms), sizeof(params));
- return prevRet;
-}
-
-static const int * GenerateCall_glGetProgramInfoLog(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- const GLsizei bufSize = static_cast<GLsizei>(dbg->GetBufferSize());
- GLsizei length = -1;
- dbg->hooks->gl.glGetProgramInfoLog(cmd.arg0(), bufSize, &length, dbg->GetBuffer());
- msg.mutable_data()->append(dbg->GetBuffer(), length);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetRenderbufferParameteriv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetShaderiv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- GLint params = -1;
- dbg->hooks->gl.glGetShaderiv(cmd.arg0(), cmd.arg1(), ¶ms);
- msg.mutable_data()->append(reinterpret_cast<char *>(¶ms), sizeof(params));
- return prevRet;
-}
-
-static const int * GenerateCall_glGetShaderInfoLog(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- const GLsizei bufSize = static_cast<GLsizei>(dbg->GetBufferSize());
- GLsizei length = -1;
- dbg->hooks->gl.glGetShaderInfoLog(cmd.arg0(), bufSize, &length, dbg->GetBuffer());
- msg.mutable_data()->append(dbg->GetBuffer(), length);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetShaderPrecisionFormat(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetShaderSource(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetString(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetTexParameterfv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetTexParameteriv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetUniformfv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetUniformiv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetVertexAttribfv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetVertexAttribiv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glGetVertexAttribPointerv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glReadPixels(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glShaderBinary(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glShaderSource(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- const char * string = cmd.data().data();
- dbg->hooks->gl.glShaderSource(cmd.arg0(), 1, &string, NULL);
- return prevRet;
-}
-
-static const int * GenerateCall_glTexImage2D(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glTexParameterfv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glTexParameteriv(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glTexSubImage2D(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
-
-static const int * GenerateCall_glVertexAttribPointer(DbgContext * const dbg,
- const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet)
-{
- assert(0);
- return prevRet;
-}
diff --git a/opengl/libs/GLES2_dbg/src/dbgcontext.cpp b/opengl/libs/GLES2_dbg/src/dbgcontext.cpp
deleted file mode 100644
index 7bbaa18..0000000
--- a/opengl/libs/GLES2_dbg/src/dbgcontext.cpp
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-#include "header.h"
-
-extern "C" {
-#include "liblzf/lzf.h"
-}
-
-namespace android {
-
-static pthread_key_t dbgEGLThreadLocalStorageKey = -1;
-static pthread_mutex_t gThreadLocalStorageKeyMutex = PTHREAD_MUTEX_INITIALIZER;
-
-DbgContext * getDbgContextThreadSpecific() {
- return (DbgContext*)pthread_getspecific(dbgEGLThreadLocalStorageKey);
-}
-
-DbgContext::DbgContext(const unsigned version, const gl_hooks_t * const hooks,
- const unsigned MAX_VERTEX_ATTRIBS)
- : lzf_buf(NULL), lzf_readIndex(0), lzf_refSize(0), lzf_refBufSize(0)
- , version(version), hooks(hooks)
- , MAX_VERTEX_ATTRIBS(MAX_VERTEX_ATTRIBS)
- , readBytesPerPixel(4)
- , captureSwap(0), captureDraw(0)
- , vertexAttribs(new VertexAttrib[MAX_VERTEX_ATTRIBS])
- , hasNonVBOAttribs(false), indexBuffers(NULL), indexBuffer(NULL)
- , program(0), maxAttrib(0)
-{
- lzf_ref[0] = lzf_ref[1] = NULL;
- for (unsigned i = 0; i < MAX_VERTEX_ATTRIBS; i++)
- vertexAttribs[i] = VertexAttrib();
- memset(&expectResponse, 0, sizeof(expectResponse));
-}
-
-DbgContext::~DbgContext()
-{
- delete vertexAttribs;
- free(lzf_buf);
- free(lzf_ref[0]);
- free(lzf_ref[1]);
-}
-
-DbgContext* CreateDbgContext(const unsigned version, const gl_hooks_t * const hooks)
-{
- pthread_mutex_lock(&gThreadLocalStorageKeyMutex);
- if (dbgEGLThreadLocalStorageKey == -1)
- pthread_key_create(&dbgEGLThreadLocalStorageKey, NULL);
- pthread_mutex_unlock(&gThreadLocalStorageKeyMutex);
-
- assert(version < 2);
- assert(GL_NO_ERROR == hooks->gl.glGetError());
- GLint MAX_VERTEX_ATTRIBS = 0;
- hooks->gl.glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &MAX_VERTEX_ATTRIBS);
- DbgContext* dbg = new DbgContext(version, hooks, MAX_VERTEX_ATTRIBS);
- glesv2debugger::Message msg, cmd;
- msg.set_context_id(reinterpret_cast<int>(dbg));
- msg.set_expect_response(false);
- msg.set_type(msg.Response);
- msg.set_function(msg.SETPROP);
- msg.set_prop(msg.GLConstant);
- msg.set_arg0(GL_MAX_VERTEX_ATTRIBS);
- msg.set_arg1(MAX_VERTEX_ATTRIBS);
- Send(msg, cmd);
-
- GLint MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0;
- hooks->gl.glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &MAX_COMBINED_TEXTURE_IMAGE_UNITS);
- msg.set_arg0(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS);
- msg.set_arg1(MAX_COMBINED_TEXTURE_IMAGE_UNITS);
- Send(msg, cmd);
-
- pthread_setspecific(dbgEGLThreadLocalStorageKey, dbg);
- return dbg;
-}
-
-void dbgReleaseThread() {
- delete getDbgContextThreadSpecific();
-}
-
-unsigned GetBytesPerPixel(const GLenum format, const GLenum type)
-{
- switch (type) {
- case GL_UNSIGNED_SHORT_5_6_5:
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_5_5_5_1:
- return 2;
- case GL_UNSIGNED_BYTE:
- break;
- default:
- ALOGE("GetBytesPerPixel: unknown type %x", type);
- }
-
- switch (format) {
- case GL_ALPHA:
- case GL_LUMINANCE:
- return 1;
- case GL_LUMINANCE_ALPHA:
- return 2;
- case GL_RGB:
- return 3;
- case GL_RGBA:
- case 0x80E1: // GL_BGRA_EXT
- return 4;
- default:
- ALOGE("GetBytesPerPixel: unknown format %x", format);
- }
-
- return 1; // in doubt...
-}
-
-void DbgContext::Fetch(const unsigned index, std::string * const data) const
-{
- // VBO data is already on client, just send user pointer data
- for (unsigned i = 0; i < maxAttrib; i++) {
- if (!vertexAttribs[i].enabled)
- continue;
- if (vertexAttribs[i].buffer > 0)
- continue;
- const char * ptr = (const char *)vertexAttribs[i].ptr;
- ptr += index * vertexAttribs[i].stride;
- data->append(ptr, vertexAttribs[i].elemSize);
- }
-}
-
-void DbgContext::Compress(const void * in_data, unsigned int in_len,
- std::string * const outStr)
-{
- if (!lzf_buf)
- lzf_buf = (char *)malloc(LZF_CHUNK_SIZE);
- assert(lzf_buf);
- const uint32_t totalDecompSize = in_len;
- outStr->append((const char *)&totalDecompSize, sizeof(totalDecompSize));
- for (unsigned int i = 0; i < in_len; i += LZF_CHUNK_SIZE) {
- uint32_t chunkSize = LZF_CHUNK_SIZE;
- if (i + LZF_CHUNK_SIZE > in_len)
- chunkSize = in_len - i;
- const uint32_t compSize = lzf_compress((const char *)in_data + i, chunkSize,
- lzf_buf, LZF_CHUNK_SIZE);
- outStr->append((const char *)&chunkSize, sizeof(chunkSize));
- outStr->append((const char *)&compSize, sizeof(compSize));
- if (compSize > 0)
- outStr->append(lzf_buf, compSize);
- else // compressed chunk bigger than LZF_CHUNK_SIZE (and uncompressed)
- outStr->append((const char *)in_data + i, chunkSize);
- }
-}
-
-unsigned char * DbgContext::Decompress(const void * in, const unsigned int inLen,
- unsigned int * const outLen)
-{
- assert(inLen > 4 * 3);
- if (inLen < 4 * 3)
- return NULL;
- *outLen = *(uint32_t *)in;
- unsigned char * const out = (unsigned char *)malloc(*outLen);
- unsigned int outPos = 0;
- const unsigned char * const end = (const unsigned char *)in + inLen;
- for (const unsigned char * inData = (const unsigned char *)in + 4; inData < end; ) {
- const uint32_t chunkOut = *(uint32_t *)inData;
- inData += 4;
- const uint32_t chunkIn = *(uint32_t *)inData;
- inData += 4;
- if (chunkIn > 0) {
- assert(inData + chunkIn <= end);
- assert(outPos + chunkOut <= *outLen);
- outPos += lzf_decompress(inData, chunkIn, out + outPos, chunkOut);
- inData += chunkIn;
- } else {
- assert(inData + chunkOut <= end);
- assert(outPos + chunkOut <= *outLen);
- memcpy(out + outPos, inData, chunkOut);
- inData += chunkOut;
- outPos += chunkOut;
- }
- }
- return out;
-}
-
-void * DbgContext::GetReadPixelsBuffer(const unsigned size)
-{
- if (lzf_refBufSize < size + 8) {
- lzf_refBufSize = size + 8;
- lzf_ref[0] = (unsigned *)realloc(lzf_ref[0], lzf_refBufSize);
- assert(lzf_ref[0]);
- memset(lzf_ref[0], 0, lzf_refBufSize);
- lzf_ref[1] = (unsigned *)realloc(lzf_ref[1], lzf_refBufSize);
- assert(lzf_ref[1]);
- memset(lzf_ref[1], 0, lzf_refBufSize);
- }
- if (lzf_refSize != size) // need to clear unused ref to maintain consistency
- { // since ref and src are swapped each time
- memset((char *)lzf_ref[0] + lzf_refSize, 0, lzf_refBufSize - lzf_refSize);
- memset((char *)lzf_ref[1] + lzf_refSize, 0, lzf_refBufSize - lzf_refSize);
- }
- lzf_refSize = size;
- lzf_readIndex ^= 1;
- return lzf_ref[lzf_readIndex];
-}
-
-void DbgContext::CompressReadPixelBuffer(std::string * const outStr)
-{
- assert(lzf_ref[0] && lzf_ref[1]);
- unsigned * const ref = lzf_ref[lzf_readIndex ^ 1];
- unsigned * const src = lzf_ref[lzf_readIndex];
- for (unsigned i = 0; i < lzf_refSize / sizeof(*ref) + 1; i++)
- ref[i] ^= src[i];
- Compress(ref, lzf_refSize, outStr);
-}
-
-char * DbgContext::GetBuffer()
-{
- if (!lzf_buf)
- lzf_buf = (char *)malloc(LZF_CHUNK_SIZE);
- assert(lzf_buf);
- return lzf_buf;
-}
-
-unsigned int DbgContext::GetBufferSize()
-{
- if (!lzf_buf)
- lzf_buf = (char *)malloc(LZF_CHUNK_SIZE);
- assert(lzf_buf);
- if (lzf_buf)
- return LZF_CHUNK_SIZE;
- else
- return 0;
-}
-
-void DbgContext::glUseProgram(GLuint program)
-{
- while (GLenum error = hooks->gl.glGetError())
- ALOGD("DbgContext::glUseProgram(%u): before glGetError() = 0x%.4X",
- program, error);
- this->program = program;
- maxAttrib = 0;
- if (program == 0)
- return;
- GLint activeAttributes = 0;
- hooks->gl.glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &activeAttributes);
- maxAttrib = 0;
- GLint maxNameLen = -1;
- hooks->gl.glGetProgramiv(program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &maxNameLen);
- char * name = new char [maxNameLen + 1];
- name[maxNameLen] = 0;
- // find total number of attribute slots used
- for (unsigned i = 0; i < activeAttributes; i++) {
- GLint size = -1;
- GLenum type = -1;
- hooks->gl.glGetActiveAttrib(program, i, maxNameLen + 1, NULL, &size, &type, name);
- GLint slot = hooks->gl.glGetAttribLocation(program, name);
- assert(slot >= 0);
- switch (type) {
- case GL_FLOAT:
- case GL_FLOAT_VEC2:
- case GL_FLOAT_VEC3:
- case GL_FLOAT_VEC4:
- slot += size;
- break;
- case GL_FLOAT_MAT2:
- slot += size * 2;
- break;
- case GL_FLOAT_MAT3:
- slot += size * 3;
- break;
- case GL_FLOAT_MAT4:
- slot += size * 4;
- break;
- default:
- assert(0);
- }
- if (slot > maxAttrib)
- maxAttrib = slot;
- }
- delete name;
- while (GLenum error = hooks->gl.glGetError())
- ALOGD("DbgContext::glUseProgram(%u): after glGetError() = 0x%.4X",
- program, error);
-}
-
-static bool HasNonVBOAttribs(const DbgContext * const ctx)
-{
- bool need = false;
- for (unsigned i = 0; !need && i < ctx->maxAttrib; i++)
- if (ctx->vertexAttribs[i].enabled && ctx->vertexAttribs[i].buffer == 0)
- need = true;
- return need;
-}
-
-void DbgContext::glVertexAttribPointer(GLuint indx, GLint size, GLenum type,
- GLboolean normalized, GLsizei stride, const GLvoid* ptr)
-{
- assert(GL_NO_ERROR == hooks->gl.glGetError());
- assert(indx < MAX_VERTEX_ATTRIBS);
- vertexAttribs[indx].size = size;
- vertexAttribs[indx].type = type;
- vertexAttribs[indx].normalized = normalized;
- switch (type) {
- case GL_FLOAT:
- vertexAttribs[indx].elemSize = sizeof(GLfloat) * size;
- break;
- case GL_INT:
- case GL_UNSIGNED_INT:
- vertexAttribs[indx].elemSize = sizeof(GLint) * size;
- break;
- case GL_SHORT:
- case GL_UNSIGNED_SHORT:
- vertexAttribs[indx].elemSize = sizeof(GLshort) * size;
- break;
- case GL_BYTE:
- case GL_UNSIGNED_BYTE:
- vertexAttribs[indx].elemSize = sizeof(GLbyte) * size;
- break;
- default:
- assert(0);
- }
- if (0 == stride)
- stride = vertexAttribs[indx].elemSize;
- vertexAttribs[indx].stride = stride;
- vertexAttribs[indx].ptr = ptr;
- hooks->gl.glGetVertexAttribiv(indx, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
- (GLint *)&vertexAttribs[indx].buffer);
- hasNonVBOAttribs = HasNonVBOAttribs(this);
-}
-
-void DbgContext::glEnableVertexAttribArray(GLuint index)
-{
- if (index >= MAX_VERTEX_ATTRIBS)
- return;
- vertexAttribs[index].enabled = true;
- hasNonVBOAttribs = HasNonVBOAttribs(this);
-}
-
-void DbgContext::glDisableVertexAttribArray(GLuint index)
-{
- if (index >= MAX_VERTEX_ATTRIBS)
- return;
- vertexAttribs[index].enabled = false;
- hasNonVBOAttribs = HasNonVBOAttribs(this);
-}
-
-void DbgContext::glBindBuffer(GLenum target, GLuint buffer)
-{
- if (GL_ELEMENT_ARRAY_BUFFER != target)
- return;
- if (0 == buffer) {
- indexBuffer = NULL;
- return;
- }
- VBO * b = indexBuffers;
- indexBuffer = NULL;
- while (b) {
- if (b->name == buffer) {
- assert(GL_ELEMENT_ARRAY_BUFFER == b->target);
- indexBuffer = b;
- break;
- }
- b = b->next;
- }
- if (!indexBuffer)
- indexBuffer = indexBuffers = new VBO(buffer, target, indexBuffers);
-}
-
-void DbgContext::glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
-{
- if (GL_ELEMENT_ARRAY_BUFFER != target)
- return;
- assert(indexBuffer);
- assert(size >= 0);
- indexBuffer->size = size;
- indexBuffer->data = realloc(indexBuffer->data, size);
- memcpy(indexBuffer->data, data, size);
-}
-
-void DbgContext::glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
-{
- if (GL_ELEMENT_ARRAY_BUFFER != target)
- return;
- assert(indexBuffer);
- assert(size >= 0);
- assert(offset >= 0);
- assert(offset + size <= indexBuffer->size);
- memcpy((char *)indexBuffer->data + offset, data, size);
-}
-
-void DbgContext::glDeleteBuffers(GLsizei n, const GLuint *buffers)
-{
- for (unsigned i = 0; i < n; i++) {
- for (unsigned j = 0; j < MAX_VERTEX_ATTRIBS; j++)
- if (buffers[i] == vertexAttribs[j].buffer) {
- vertexAttribs[j].buffer = 0;
- vertexAttribs[j].enabled = false;
- }
- VBO * b = indexBuffers, * previous = NULL;
- while (b) {
- if (b->name == buffers[i]) {
- assert(GL_ELEMENT_ARRAY_BUFFER == b->target);
- if (indexBuffer == b)
- indexBuffer = NULL;
- if (previous)
- previous->next = b->next;
- else
- indexBuffers = b->next;
- free(b->data);
- delete b;
- break;
- }
- previous = b;
- b = b->next;
- }
- }
- hasNonVBOAttribs = HasNonVBOAttribs(this);
-}
-
-}; // namespace android
diff --git a/opengl/libs/GLES2_dbg/src/debugger_message.pb.cpp b/opengl/libs/GLES2_dbg/src/debugger_message.pb.cpp
deleted file mode 100644
index 50f70f7..0000000
--- a/opengl/libs/GLES2_dbg/src/debugger_message.pb.cpp
+++ /dev/null
@@ -1,1455 +0,0 @@
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
-#include "debugger_message.pb.h"
-#include <google/protobuf/stubs/once.h>
-#include <google/protobuf/io/coded_stream.h>
-#include <google/protobuf/wire_format_lite_inl.h>
-// @@protoc_insertion_point(includes)
-
-namespace com {
-namespace android {
-namespace glesv2debugger {
-
-void protobuf_ShutdownFile_debugger_5fmessage_2eproto() {
- delete Message::default_instance_;
-}
-
-void protobuf_AddDesc_debugger_5fmessage_2eproto() {
- static bool already_here = false;
- if (already_here) return;
- already_here = true;
- GOOGLE_PROTOBUF_VERIFY_VERSION;
-
- Message::default_instance_ = new Message();
- Message::default_instance_->InitAsDefaultInstance();
- ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_debugger_5fmessage_2eproto);
-}
-
-// Force AddDescriptors() to be called at static initialization time.
-struct StaticDescriptorInitializer_debugger_5fmessage_2eproto {
- StaticDescriptorInitializer_debugger_5fmessage_2eproto() {
- protobuf_AddDesc_debugger_5fmessage_2eproto();
- }
-} static_descriptor_initializer_debugger_5fmessage_2eproto_;
-
-
-// ===================================================================
-
-bool Message_Function_IsValid(int value) {
- switch(value) {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- case 9:
- case 10:
- case 11:
- case 12:
- case 13:
- case 14:
- case 15:
- case 16:
- case 17:
- case 18:
- case 19:
- case 20:
- case 21:
- case 22:
- case 23:
- case 24:
- case 25:
- case 26:
- case 27:
- case 28:
- case 29:
- case 30:
- case 31:
- case 32:
- case 33:
- case 34:
- case 35:
- case 36:
- case 37:
- case 38:
- case 39:
- case 40:
- case 41:
- case 42:
- case 43:
- case 44:
- case 45:
- case 46:
- case 47:
- case 48:
- case 49:
- case 50:
- case 51:
- case 52:
- case 53:
- case 54:
- case 55:
- case 56:
- case 57:
- case 58:
- case 59:
- case 60:
- case 61:
- case 62:
- case 63:
- case 64:
- case 65:
- case 66:
- case 67:
- case 68:
- case 69:
- case 70:
- case 71:
- case 72:
- case 73:
- case 74:
- case 75:
- case 76:
- case 77:
- case 78:
- case 79:
- case 80:
- case 81:
- case 82:
- case 83:
- case 84:
- case 85:
- case 86:
- case 87:
- case 88:
- case 89:
- case 90:
- case 91:
- case 92:
- case 93:
- case 94:
- case 95:
- case 96:
- case 97:
- case 98:
- case 99:
- case 100:
- case 101:
- case 102:
- case 103:
- case 104:
- case 105:
- case 106:
- case 107:
- case 108:
- case 109:
- case 110:
- case 111:
- case 112:
- case 113:
- case 114:
- case 115:
- case 116:
- case 117:
- case 118:
- case 119:
- case 120:
- case 121:
- case 122:
- case 123:
- case 124:
- case 125:
- case 126:
- case 127:
- case 128:
- case 129:
- case 130:
- case 131:
- case 132:
- case 133:
- case 134:
- case 135:
- case 136:
- case 137:
- case 138:
- case 139:
- case 140:
- case 141:
- case 142:
- case 143:
- case 144:
- case 145:
- case 146:
- case 147:
- case 148:
- case 149:
- case 150:
- case 151:
- case 152:
- case 153:
- case 154:
- case 155:
- case 156:
- case 157:
- case 158:
- case 159:
- case 160:
- case 161:
- case 162:
- case 163:
- case 164:
- case 165:
- case 166:
- case 167:
- case 168:
- case 169:
- case 170:
- case 171:
- case 172:
- case 173:
- case 174:
- case 175:
- case 176:
- case 177:
- case 178:
- case 179:
- case 180:
- case 181:
- case 182:
- case 183:
- case 184:
- case 185:
- case 186:
- case 187:
- case 188:
- case 189:
- case 190:
- return true;
- default:
- return false;
- }
-}
-
-#ifndef _MSC_VER
-const Message_Function Message::glActiveTexture;
-const Message_Function Message::glAttachShader;
-const Message_Function Message::glBindAttribLocation;
-const Message_Function Message::glBindBuffer;
-const Message_Function Message::glBindFramebuffer;
-const Message_Function Message::glBindRenderbuffer;
-const Message_Function Message::glBindTexture;
-const Message_Function Message::glBlendColor;
-const Message_Function Message::glBlendEquation;
-const Message_Function Message::glBlendEquationSeparate;
-const Message_Function Message::glBlendFunc;
-const Message_Function Message::glBlendFuncSeparate;
-const Message_Function Message::glBufferData;
-const Message_Function Message::glBufferSubData;
-const Message_Function Message::glCheckFramebufferStatus;
-const Message_Function Message::glClear;
-const Message_Function Message::glClearColor;
-const Message_Function Message::glClearDepthf;
-const Message_Function Message::glClearStencil;
-const Message_Function Message::glColorMask;
-const Message_Function Message::glCompileShader;
-const Message_Function Message::glCompressedTexImage2D;
-const Message_Function Message::glCompressedTexSubImage2D;
-const Message_Function Message::glCopyTexImage2D;
-const Message_Function Message::glCopyTexSubImage2D;
-const Message_Function Message::glCreateProgram;
-const Message_Function Message::glCreateShader;
-const Message_Function Message::glCullFace;
-const Message_Function Message::glDeleteBuffers;
-const Message_Function Message::glDeleteFramebuffers;
-const Message_Function Message::glDeleteProgram;
-const Message_Function Message::glDeleteRenderbuffers;
-const Message_Function Message::glDeleteShader;
-const Message_Function Message::glDeleteTextures;
-const Message_Function Message::glDepthFunc;
-const Message_Function Message::glDepthMask;
-const Message_Function Message::glDepthRangef;
-const Message_Function Message::glDetachShader;
-const Message_Function Message::glDisable;
-const Message_Function Message::glDisableVertexAttribArray;
-const Message_Function Message::glDrawArrays;
-const Message_Function Message::glDrawElements;
-const Message_Function Message::glEnable;
-const Message_Function Message::glEnableVertexAttribArray;
-const Message_Function Message::glFinish;
-const Message_Function Message::glFlush;
-const Message_Function Message::glFramebufferRenderbuffer;
-const Message_Function Message::glFramebufferTexture2D;
-const Message_Function Message::glFrontFace;
-const Message_Function Message::glGenBuffers;
-const Message_Function Message::glGenerateMipmap;
-const Message_Function Message::glGenFramebuffers;
-const Message_Function Message::glGenRenderbuffers;
-const Message_Function Message::glGenTextures;
-const Message_Function Message::glGetActiveAttrib;
-const Message_Function Message::glGetActiveUniform;
-const Message_Function Message::glGetAttachedShaders;
-const Message_Function Message::glGetAttribLocation;
-const Message_Function Message::glGetBooleanv;
-const Message_Function Message::glGetBufferParameteriv;
-const Message_Function Message::glGetError;
-const Message_Function Message::glGetFloatv;
-const Message_Function Message::glGetFramebufferAttachmentParameteriv;
-const Message_Function Message::glGetIntegerv;
-const Message_Function Message::glGetProgramiv;
-const Message_Function Message::glGetProgramInfoLog;
-const Message_Function Message::glGetRenderbufferParameteriv;
-const Message_Function Message::glGetShaderiv;
-const Message_Function Message::glGetShaderInfoLog;
-const Message_Function Message::glGetShaderPrecisionFormat;
-const Message_Function Message::glGetShaderSource;
-const Message_Function Message::glGetString;
-const Message_Function Message::glGetTexParameterfv;
-const Message_Function Message::glGetTexParameteriv;
-const Message_Function Message::glGetUniformfv;
-const Message_Function Message::glGetUniformiv;
-const Message_Function Message::glGetUniformLocation;
-const Message_Function Message::glGetVertexAttribfv;
-const Message_Function Message::glGetVertexAttribiv;
-const Message_Function Message::glGetVertexAttribPointerv;
-const Message_Function Message::glHint;
-const Message_Function Message::glIsBuffer;
-const Message_Function Message::glIsEnabled;
-const Message_Function Message::glIsFramebuffer;
-const Message_Function Message::glIsProgram;
-const Message_Function Message::glIsRenderbuffer;
-const Message_Function Message::glIsShader;
-const Message_Function Message::glIsTexture;
-const Message_Function Message::glLineWidth;
-const Message_Function Message::glLinkProgram;
-const Message_Function Message::glPixelStorei;
-const Message_Function Message::glPolygonOffset;
-const Message_Function Message::glReadPixels;
-const Message_Function Message::glReleaseShaderCompiler;
-const Message_Function Message::glRenderbufferStorage;
-const Message_Function Message::glSampleCoverage;
-const Message_Function Message::glScissor;
-const Message_Function Message::glShaderBinary;
-const Message_Function Message::glShaderSource;
-const Message_Function Message::glStencilFunc;
-const Message_Function Message::glStencilFuncSeparate;
-const Message_Function Message::glStencilMask;
-const Message_Function Message::glStencilMaskSeparate;
-const Message_Function Message::glStencilOp;
-const Message_Function Message::glStencilOpSeparate;
-const Message_Function Message::glTexImage2D;
-const Message_Function Message::glTexParameterf;
-const Message_Function Message::glTexParameterfv;
-const Message_Function Message::glTexParameteri;
-const Message_Function Message::glTexParameteriv;
-const Message_Function Message::glTexSubImage2D;
-const Message_Function Message::glUniform1f;
-const Message_Function Message::glUniform1fv;
-const Message_Function Message::glUniform1i;
-const Message_Function Message::glUniform1iv;
-const Message_Function Message::glUniform2f;
-const Message_Function Message::glUniform2fv;
-const Message_Function Message::glUniform2i;
-const Message_Function Message::glUniform2iv;
-const Message_Function Message::glUniform3f;
-const Message_Function Message::glUniform3fv;
-const Message_Function Message::glUniform3i;
-const Message_Function Message::glUniform3iv;
-const Message_Function Message::glUniform4f;
-const Message_Function Message::glUniform4fv;
-const Message_Function Message::glUniform4i;
-const Message_Function Message::glUniform4iv;
-const Message_Function Message::glUniformMatrix2fv;
-const Message_Function Message::glUniformMatrix3fv;
-const Message_Function Message::glUniformMatrix4fv;
-const Message_Function Message::glUseProgram;
-const Message_Function Message::glValidateProgram;
-const Message_Function Message::glVertexAttrib1f;
-const Message_Function Message::glVertexAttrib1fv;
-const Message_Function Message::glVertexAttrib2f;
-const Message_Function Message::glVertexAttrib2fv;
-const Message_Function Message::glVertexAttrib3f;
-const Message_Function Message::glVertexAttrib3fv;
-const Message_Function Message::glVertexAttrib4f;
-const Message_Function Message::glVertexAttrib4fv;
-const Message_Function Message::glVertexAttribPointer;
-const Message_Function Message::glViewport;
-const Message_Function Message::eglGetDisplay;
-const Message_Function Message::eglInitialize;
-const Message_Function Message::eglTerminate;
-const Message_Function Message::eglGetConfigs;
-const Message_Function Message::eglChooseConfig;
-const Message_Function Message::eglGetConfigAttrib;
-const Message_Function Message::eglCreateWindowSurface;
-const Message_Function Message::eglCreatePixmapSurface;
-const Message_Function Message::eglCreatePbufferSurface;
-const Message_Function Message::eglDestroySurface;
-const Message_Function Message::eglQuerySurface;
-const Message_Function Message::eglCreateContext;
-const Message_Function Message::eglDestroyContext;
-const Message_Function Message::eglMakeCurrent;
-const Message_Function Message::eglGetCurrentContext;
-const Message_Function Message::eglGetCurrentSurface;
-const Message_Function Message::eglGetCurrentDisplay;
-const Message_Function Message::eglQueryContext;
-const Message_Function Message::eglWaitGL;
-const Message_Function Message::eglWaitNative;
-const Message_Function Message::eglSwapBuffers;
-const Message_Function Message::eglCopyBuffers;
-const Message_Function Message::eglGetError;
-const Message_Function Message::eglQueryString;
-const Message_Function Message::eglGetProcAddress;
-const Message_Function Message::eglSurfaceAttrib;
-const Message_Function Message::eglBindTexImage;
-const Message_Function Message::eglReleaseTexImage;
-const Message_Function Message::eglSwapInterval;
-const Message_Function Message::eglBindAPI;
-const Message_Function Message::eglQueryAPI;
-const Message_Function Message::eglWaitClient;
-const Message_Function Message::eglReleaseThread;
-const Message_Function Message::eglCreatePbufferFromClientBuffer;
-const Message_Function Message::eglLockSurfaceKHR;
-const Message_Function Message::eglUnlockSurfaceKHR;
-const Message_Function Message::eglCreateImageKHR;
-const Message_Function Message::eglDestroyImageKHR;
-const Message_Function Message::eglCreateSyncKHR;
-const Message_Function Message::eglDestroySyncKHR;
-const Message_Function Message::eglClientWaitSyncKHR;
-const Message_Function Message::eglGetSyncAttribKHR;
-const Message_Function Message::eglSetSwapRectangleANDROID;
-const Message_Function Message::eglGetRenderBufferANDROID;
-const Message_Function Message::ACK;
-const Message_Function Message::NEG;
-const Message_Function Message::CONTINUE;
-const Message_Function Message::SKIP;
-const Message_Function Message::SETPROP;
-const Message_Function Message::Function_MIN;
-const Message_Function Message::Function_MAX;
-const int Message::Function_ARRAYSIZE;
-#endif // _MSC_VER
-bool Message_Type_IsValid(int value) {
- switch(value) {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- return true;
- default:
- return false;
- }
-}
-
-#ifndef _MSC_VER
-const Message_Type Message::BeforeCall;
-const Message_Type Message::AfterCall;
-const Message_Type Message::AfterGeneratedCall;
-const Message_Type Message::Response;
-const Message_Type Message::CompleteCall;
-const Message_Type Message::Type_MIN;
-const Message_Type Message::Type_MAX;
-const int Message::Type_ARRAYSIZE;
-#endif // _MSC_VER
-bool Message_DataType_IsValid(int value) {
- switch(value) {
- case 0:
- case 1:
- return true;
- default:
- return false;
- }
-}
-
-#ifndef _MSC_VER
-const Message_DataType Message::ReferencedImage;
-const Message_DataType Message::NonreferencedImage;
-const Message_DataType Message::DataType_MIN;
-const Message_DataType Message::DataType_MAX;
-const int Message::DataType_ARRAYSIZE;
-#endif // _MSC_VER
-bool Message_Prop_IsValid(int value) {
- switch(value) {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- return true;
- default:
- return false;
- }
-}
-
-#ifndef _MSC_VER
-const Message_Prop Message::CaptureDraw;
-const Message_Prop Message::TimeMode;
-const Message_Prop Message::ExpectResponse;
-const Message_Prop Message::CaptureSwap;
-const Message_Prop Message::GLConstant;
-const Message_Prop Message::Prop_MIN;
-const Message_Prop Message::Prop_MAX;
-const int Message::Prop_ARRAYSIZE;
-#endif // _MSC_VER
-const ::std::string Message::_default_data_;
-#ifndef _MSC_VER
-const int Message::kContextIdFieldNumber;
-const int Message::kFunctionFieldNumber;
-const int Message::kTypeFieldNumber;
-const int Message::kExpectResponseFieldNumber;
-const int Message::kRetFieldNumber;
-const int Message::kArg0FieldNumber;
-const int Message::kArg1FieldNumber;
-const int Message::kArg2FieldNumber;
-const int Message::kArg3FieldNumber;
-const int Message::kArg4FieldNumber;
-const int Message::kArg5FieldNumber;
-const int Message::kArg6FieldNumber;
-const int Message::kArg7FieldNumber;
-const int Message::kArg8FieldNumber;
-const int Message::kDataFieldNumber;
-const int Message::kDataTypeFieldNumber;
-const int Message::kPixelFormatFieldNumber;
-const int Message::kPixelTypeFieldNumber;
-const int Message::kImageWidthFieldNumber;
-const int Message::kImageHeightFieldNumber;
-const int Message::kTimeFieldNumber;
-const int Message::kPropFieldNumber;
-const int Message::kClockFieldNumber;
-#endif // !_MSC_VER
-
-Message::Message()
- : ::google::protobuf::MessageLite() {
- SharedCtor();
-}
-
-void Message::InitAsDefaultInstance() {
-}
-
-Message::Message(const Message& from)
- : ::google::protobuf::MessageLite() {
- SharedCtor();
- MergeFrom(from);
-}
-
-void Message::SharedCtor() {
- _cached_size_ = 0;
- context_id_ = 0;
- function_ = 187;
- type_ = 0;
- expect_response_ = false;
- ret_ = 0;
- arg0_ = 0;
- arg1_ = 0;
- arg2_ = 0;
- arg3_ = 0;
- arg4_ = 0;
- arg5_ = 0;
- arg6_ = 0;
- arg7_ = 0;
- arg8_ = 0;
- data_ = const_cast< ::std::string*>(&_default_data_);
- data_type_ = 0;
- pixel_format_ = 0;
- pixel_type_ = 0;
- image_width_ = 0;
- image_height_ = 0;
- time_ = 0;
- prop_ = 0;
- clock_ = 0;
- ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-Message::~Message() {
- SharedDtor();
-}
-
-void Message::SharedDtor() {
- if (data_ != &_default_data_) {
- delete data_;
- }
- if (this != default_instance_) {
- }
-}
-
-void Message::SetCachedSize(int size) const {
- GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
- _cached_size_ = size;
- GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const Message& Message::default_instance() {
- if (default_instance_ == NULL) protobuf_AddDesc_debugger_5fmessage_2eproto(); return *default_instance_;
-}
-
-Message* Message::default_instance_ = NULL;
-
-Message* Message::New() const {
- return new Message;
-}
-
-void Message::Clear() {
- if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
- context_id_ = 0;
- function_ = 187;
- type_ = 0;
- expect_response_ = false;
- ret_ = 0;
- arg0_ = 0;
- arg1_ = 0;
- arg2_ = 0;
- }
- if (_has_bits_[8 / 32] & (0xffu << (8 % 32))) {
- arg3_ = 0;
- arg4_ = 0;
- arg5_ = 0;
- arg6_ = 0;
- arg7_ = 0;
- arg8_ = 0;
- if (_has_bit(14)) {
- if (data_ != &_default_data_) {
- data_->clear();
- }
- }
- data_type_ = 0;
- }
- if (_has_bits_[16 / 32] & (0xffu << (16 % 32))) {
- pixel_format_ = 0;
- pixel_type_ = 0;
- image_width_ = 0;
- image_height_ = 0;
- time_ = 0;
- prop_ = 0;
- clock_ = 0;
- }
- ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-bool Message::MergePartialFromCodedStream(
- ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
- ::google::protobuf::uint32 tag;
- while ((tag = input->ReadTag()) != 0) {
- switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
- // required int32 context_id = 1;
- case 1: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &context_id_)));
- _set_bit(0);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(16)) goto parse_function;
- break;
- }
-
- // required .com.android.glesv2debugger.Message.Function function = 2 [default = NEG];
- case 2: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_function:
- int value;
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
- input, &value)));
- if (::com::android::glesv2debugger::Message_Function_IsValid(value)) {
- set_function(static_cast< ::com::android::glesv2debugger::Message_Function >(value));
- }
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(24)) goto parse_type;
- break;
- }
-
- // required .com.android.glesv2debugger.Message.Type type = 3;
- case 3: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_type:
- int value;
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
- input, &value)));
- if (::com::android::glesv2debugger::Message_Type_IsValid(value)) {
- set_type(static_cast< ::com::android::glesv2debugger::Message_Type >(value));
- }
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(32)) goto parse_expect_response;
- break;
- }
-
- // required bool expect_response = 4;
- case 4: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_expect_response:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
- input, &expect_response_)));
- _set_bit(3);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(40)) goto parse_ret;
- break;
- }
-
- // optional int32 ret = 5;
- case 5: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_ret:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &ret_)));
- _set_bit(4);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(48)) goto parse_arg0;
- break;
- }
-
- // optional int32 arg0 = 6;
- case 6: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_arg0:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &arg0_)));
- _set_bit(5);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(56)) goto parse_arg1;
- break;
- }
-
- // optional int32 arg1 = 7;
- case 7: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_arg1:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &arg1_)));
- _set_bit(6);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(64)) goto parse_arg2;
- break;
- }
-
- // optional int32 arg2 = 8;
- case 8: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_arg2:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &arg2_)));
- _set_bit(7);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(72)) goto parse_arg3;
- break;
- }
-
- // optional int32 arg3 = 9;
- case 9: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_arg3:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &arg3_)));
- _set_bit(8);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(82)) goto parse_data;
- break;
- }
-
- // optional bytes data = 10;
- case 10: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
- parse_data:
- DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
- input, this->mutable_data()));
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(93)) goto parse_time;
- break;
- }
-
- // optional float time = 11;
- case 11: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED32) {
- parse_time:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
- input, &time_)));
- _set_bit(20);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(128)) goto parse_arg4;
- break;
- }
-
- // optional int32 arg4 = 16;
- case 16: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_arg4:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &arg4_)));
- _set_bit(9);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(136)) goto parse_arg5;
- break;
- }
-
- // optional int32 arg5 = 17;
- case 17: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_arg5:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &arg5_)));
- _set_bit(10);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(144)) goto parse_arg6;
- break;
- }
-
- // optional int32 arg6 = 18;
- case 18: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_arg6:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &arg6_)));
- _set_bit(11);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(152)) goto parse_arg7;
- break;
- }
-
- // optional int32 arg7 = 19;
- case 19: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_arg7:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &arg7_)));
- _set_bit(12);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(160)) goto parse_arg8;
- break;
- }
-
- // optional int32 arg8 = 20;
- case 20: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_arg8:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &arg8_)));
- _set_bit(13);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(168)) goto parse_prop;
- break;
- }
-
- // optional .com.android.glesv2debugger.Message.Prop prop = 21;
- case 21: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_prop:
- int value;
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
- input, &value)));
- if (::com::android::glesv2debugger::Message_Prop_IsValid(value)) {
- set_prop(static_cast< ::com::android::glesv2debugger::Message_Prop >(value));
- }
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(181)) goto parse_clock;
- break;
- }
-
- // optional float clock = 22;
- case 22: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED32) {
- parse_clock:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
- input, &clock_)));
- _set_bit(22);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(184)) goto parse_data_type;
- break;
- }
-
- // optional .com.android.glesv2debugger.Message.DataType data_type = 23;
- case 23: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_data_type:
- int value;
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
- input, &value)));
- if (::com::android::glesv2debugger::Message_DataType_IsValid(value)) {
- set_data_type(static_cast< ::com::android::glesv2debugger::Message_DataType >(value));
- }
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(192)) goto parse_pixel_format;
- break;
- }
-
- // optional int32 pixel_format = 24;
- case 24: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_pixel_format:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &pixel_format_)));
- _set_bit(16);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(200)) goto parse_pixel_type;
- break;
- }
-
- // optional int32 pixel_type = 25;
- case 25: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_pixel_type:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &pixel_type_)));
- _set_bit(17);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(208)) goto parse_image_width;
- break;
- }
-
- // optional int32 image_width = 26;
- case 26: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_image_width:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &image_width_)));
- _set_bit(18);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectTag(216)) goto parse_image_height;
- break;
- }
-
- // optional int32 image_height = 27;
- case 27: {
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
- parse_image_height:
- DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
- ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
- input, &image_height_)));
- _set_bit(19);
- } else {
- goto handle_uninterpreted;
- }
- if (input->ExpectAtEnd()) return true;
- break;
- }
-
- default: {
- handle_uninterpreted:
- if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
- ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
- return true;
- }
- DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
- break;
- }
- }
- }
- return true;
-#undef DO_
-}
-
-void Message::SerializeWithCachedSizes(
- ::google::protobuf::io::CodedOutputStream* output) const {
- // required int32 context_id = 1;
- if (_has_bit(0)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->context_id(), output);
- }
-
- // required .com.android.glesv2debugger.Message.Function function = 2 [default = NEG];
- if (_has_bit(1)) {
- ::google::protobuf::internal::WireFormatLite::WriteEnum(
- 2, this->function(), output);
- }
-
- // required .com.android.glesv2debugger.Message.Type type = 3;
- if (_has_bit(2)) {
- ::google::protobuf::internal::WireFormatLite::WriteEnum(
- 3, this->type(), output);
- }
-
- // required bool expect_response = 4;
- if (_has_bit(3)) {
- ::google::protobuf::internal::WireFormatLite::WriteBool(4, this->expect_response(), output);
- }
-
- // optional int32 ret = 5;
- if (_has_bit(4)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->ret(), output);
- }
-
- // optional int32 arg0 = 6;
- if (_has_bit(5)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->arg0(), output);
- }
-
- // optional int32 arg1 = 7;
- if (_has_bit(6)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(7, this->arg1(), output);
- }
-
- // optional int32 arg2 = 8;
- if (_has_bit(7)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(8, this->arg2(), output);
- }
-
- // optional int32 arg3 = 9;
- if (_has_bit(8)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(9, this->arg3(), output);
- }
-
- // optional bytes data = 10;
- if (_has_bit(14)) {
- ::google::protobuf::internal::WireFormatLite::WriteBytes(
- 10, this->data(), output);
- }
-
- // optional float time = 11;
- if (_has_bit(20)) {
- ::google::protobuf::internal::WireFormatLite::WriteFloat(11, this->time(), output);
- }
-
- // optional int32 arg4 = 16;
- if (_has_bit(9)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(16, this->arg4(), output);
- }
-
- // optional int32 arg5 = 17;
- if (_has_bit(10)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(17, this->arg5(), output);
- }
-
- // optional int32 arg6 = 18;
- if (_has_bit(11)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(18, this->arg6(), output);
- }
-
- // optional int32 arg7 = 19;
- if (_has_bit(12)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(19, this->arg7(), output);
- }
-
- // optional int32 arg8 = 20;
- if (_has_bit(13)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(20, this->arg8(), output);
- }
-
- // optional .com.android.glesv2debugger.Message.Prop prop = 21;
- if (_has_bit(21)) {
- ::google::protobuf::internal::WireFormatLite::WriteEnum(
- 21, this->prop(), output);
- }
-
- // optional float clock = 22;
- if (_has_bit(22)) {
- ::google::protobuf::internal::WireFormatLite::WriteFloat(22, this->clock(), output);
- }
-
- // optional .com.android.glesv2debugger.Message.DataType data_type = 23;
- if (_has_bit(15)) {
- ::google::protobuf::internal::WireFormatLite::WriteEnum(
- 23, this->data_type(), output);
- }
-
- // optional int32 pixel_format = 24;
- if (_has_bit(16)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(24, this->pixel_format(), output);
- }
-
- // optional int32 pixel_type = 25;
- if (_has_bit(17)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(25, this->pixel_type(), output);
- }
-
- // optional int32 image_width = 26;
- if (_has_bit(18)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(26, this->image_width(), output);
- }
-
- // optional int32 image_height = 27;
- if (_has_bit(19)) {
- ::google::protobuf::internal::WireFormatLite::WriteInt32(27, this->image_height(), output);
- }
-
-}
-
-int Message::ByteSize() const {
- int total_size = 0;
-
- if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
- // required int32 context_id = 1;
- if (has_context_id()) {
- total_size += 1 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->context_id());
- }
-
- // required .com.android.glesv2debugger.Message.Function function = 2 [default = NEG];
- if (has_function()) {
- total_size += 1 +
- ::google::protobuf::internal::WireFormatLite::EnumSize(this->function());
- }
-
- // required .com.android.glesv2debugger.Message.Type type = 3;
- if (has_type()) {
- total_size += 1 +
- ::google::protobuf::internal::WireFormatLite::EnumSize(this->type());
- }
-
- // required bool expect_response = 4;
- if (has_expect_response()) {
- total_size += 1 + 1;
- }
-
- // optional int32 ret = 5;
- if (has_ret()) {
- total_size += 1 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->ret());
- }
-
- // optional int32 arg0 = 6;
- if (has_arg0()) {
- total_size += 1 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->arg0());
- }
-
- // optional int32 arg1 = 7;
- if (has_arg1()) {
- total_size += 1 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->arg1());
- }
-
- // optional int32 arg2 = 8;
- if (has_arg2()) {
- total_size += 1 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->arg2());
- }
-
- }
- if (_has_bits_[8 / 32] & (0xffu << (8 % 32))) {
- // optional int32 arg3 = 9;
- if (has_arg3()) {
- total_size += 1 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->arg3());
- }
-
- // optional int32 arg4 = 16;
- if (has_arg4()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->arg4());
- }
-
- // optional int32 arg5 = 17;
- if (has_arg5()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->arg5());
- }
-
- // optional int32 arg6 = 18;
- if (has_arg6()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->arg6());
- }
-
- // optional int32 arg7 = 19;
- if (has_arg7()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->arg7());
- }
-
- // optional int32 arg8 = 20;
- if (has_arg8()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->arg8());
- }
-
- // optional bytes data = 10;
- if (has_data()) {
- total_size += 1 +
- ::google::protobuf::internal::WireFormatLite::BytesSize(
- this->data());
- }
-
- // optional .com.android.glesv2debugger.Message.DataType data_type = 23;
- if (has_data_type()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::EnumSize(this->data_type());
- }
-
- }
- if (_has_bits_[16 / 32] & (0xffu << (16 % 32))) {
- // optional int32 pixel_format = 24;
- if (has_pixel_format()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->pixel_format());
- }
-
- // optional int32 pixel_type = 25;
- if (has_pixel_type()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->pixel_type());
- }
-
- // optional int32 image_width = 26;
- if (has_image_width()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->image_width());
- }
-
- // optional int32 image_height = 27;
- if (has_image_height()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::Int32Size(
- this->image_height());
- }
-
- // optional float time = 11;
- if (has_time()) {
- total_size += 1 + 4;
- }
-
- // optional .com.android.glesv2debugger.Message.Prop prop = 21;
- if (has_prop()) {
- total_size += 2 +
- ::google::protobuf::internal::WireFormatLite::EnumSize(this->prop());
- }
-
- // optional float clock = 22;
- if (has_clock()) {
- total_size += 2 + 4;
- }
-
- }
- GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
- _cached_size_ = total_size;
- GOOGLE_SAFE_CONCURRENT_WRITES_END();
- return total_size;
-}
-
-void Message::CheckTypeAndMergeFrom(
- const ::google::protobuf::MessageLite& from) {
- MergeFrom(*::google::protobuf::down_cast<const Message*>(&from));
-}
-
-void Message::MergeFrom(const Message& from) {
- GOOGLE_CHECK_NE(&from, this);
- if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
- if (from._has_bit(0)) {
- set_context_id(from.context_id());
- }
- if (from._has_bit(1)) {
- set_function(from.function());
- }
- if (from._has_bit(2)) {
- set_type(from.type());
- }
- if (from._has_bit(3)) {
- set_expect_response(from.expect_response());
- }
- if (from._has_bit(4)) {
- set_ret(from.ret());
- }
- if (from._has_bit(5)) {
- set_arg0(from.arg0());
- }
- if (from._has_bit(6)) {
- set_arg1(from.arg1());
- }
- if (from._has_bit(7)) {
- set_arg2(from.arg2());
- }
- }
- if (from._has_bits_[8 / 32] & (0xffu << (8 % 32))) {
- if (from._has_bit(8)) {
- set_arg3(from.arg3());
- }
- if (from._has_bit(9)) {
- set_arg4(from.arg4());
- }
- if (from._has_bit(10)) {
- set_arg5(from.arg5());
- }
- if (from._has_bit(11)) {
- set_arg6(from.arg6());
- }
- if (from._has_bit(12)) {
- set_arg7(from.arg7());
- }
- if (from._has_bit(13)) {
- set_arg8(from.arg8());
- }
- if (from._has_bit(14)) {
- set_data(from.data());
- }
- if (from._has_bit(15)) {
- set_data_type(from.data_type());
- }
- }
- if (from._has_bits_[16 / 32] & (0xffu << (16 % 32))) {
- if (from._has_bit(16)) {
- set_pixel_format(from.pixel_format());
- }
- if (from._has_bit(17)) {
- set_pixel_type(from.pixel_type());
- }
- if (from._has_bit(18)) {
- set_image_width(from.image_width());
- }
- if (from._has_bit(19)) {
- set_image_height(from.image_height());
- }
- if (from._has_bit(20)) {
- set_time(from.time());
- }
- if (from._has_bit(21)) {
- set_prop(from.prop());
- }
- if (from._has_bit(22)) {
- set_clock(from.clock());
- }
- }
-}
-
-void Message::CopyFrom(const Message& from) {
- if (&from == this) return;
- Clear();
- MergeFrom(from);
-}
-
-bool Message::IsInitialized() const {
- if ((_has_bits_[0] & 0x0000000f) != 0x0000000f) return false;
-
- return true;
-}
-
-void Message::Swap(Message* other) {
- if (other != this) {
- std::swap(context_id_, other->context_id_);
- std::swap(function_, other->function_);
- std::swap(type_, other->type_);
- std::swap(expect_response_, other->expect_response_);
- std::swap(ret_, other->ret_);
- std::swap(arg0_, other->arg0_);
- std::swap(arg1_, other->arg1_);
- std::swap(arg2_, other->arg2_);
- std::swap(arg3_, other->arg3_);
- std::swap(arg4_, other->arg4_);
- std::swap(arg5_, other->arg5_);
- std::swap(arg6_, other->arg6_);
- std::swap(arg7_, other->arg7_);
- std::swap(arg8_, other->arg8_);
- std::swap(data_, other->data_);
- std::swap(data_type_, other->data_type_);
- std::swap(pixel_format_, other->pixel_format_);
- std::swap(pixel_type_, other->pixel_type_);
- std::swap(image_width_, other->image_width_);
- std::swap(image_height_, other->image_height_);
- std::swap(time_, other->time_);
- std::swap(prop_, other->prop_);
- std::swap(clock_, other->clock_);
- std::swap(_has_bits_[0], other->_has_bits_[0]);
- std::swap(_cached_size_, other->_cached_size_);
- }
-}
-
-::std::string Message::GetTypeName() const {
- return "com.android.glesv2debugger.Message";
-}
-
-
-// @@protoc_insertion_point(namespace_scope)
-
-} // namespace glesv2debugger
-} // namespace android
-} // namespace com
-
-// @@protoc_insertion_point(global_scope)
diff --git a/opengl/libs/GLES2_dbg/src/debugger_message.pb.h b/opengl/libs/GLES2_dbg/src/debugger_message.pb.h
deleted file mode 100644
index 5c94664..0000000
--- a/opengl/libs/GLES2_dbg/src/debugger_message.pb.h
+++ /dev/null
@@ -1,1187 +0,0 @@
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-// source: debugger_message.proto
-
-#ifndef PROTOBUF_debugger_5fmessage_2eproto__INCLUDED
-#define PROTOBUF_debugger_5fmessage_2eproto__INCLUDED
-
-#include <string>
-
-#include <google/protobuf/stubs/common.h>
-
-#if GOOGLE_PROTOBUF_VERSION < 2003000
-#error This file was generated by a newer version of protoc which is
-#error incompatible with your Protocol Buffer headers. Please update
-#error your headers.
-#endif
-#if 2003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
-#error This file was generated by an older version of protoc which is
-#error incompatible with your Protocol Buffer headers. Please
-#error regenerate this file with a newer version of protoc.
-#endif
-
-#include <google/protobuf/generated_message_util.h>
-#include <google/protobuf/repeated_field.h>
-#include <google/protobuf/extension_set.h>
-// @@protoc_insertion_point(includes)
-
-namespace com {
-namespace android {
-namespace glesv2debugger {
-
-// Internal implementation detail -- do not call these.
-void protobuf_AddDesc_debugger_5fmessage_2eproto();
-void protobuf_AssignDesc_debugger_5fmessage_2eproto();
-void protobuf_ShutdownFile_debugger_5fmessage_2eproto();
-
-class Message;
-
-enum Message_Function {
- Message_Function_glActiveTexture = 0,
- Message_Function_glAttachShader = 1,
- Message_Function_glBindAttribLocation = 2,
- Message_Function_glBindBuffer = 3,
- Message_Function_glBindFramebuffer = 4,
- Message_Function_glBindRenderbuffer = 5,
- Message_Function_glBindTexture = 6,
- Message_Function_glBlendColor = 7,
- Message_Function_glBlendEquation = 8,
- Message_Function_glBlendEquationSeparate = 9,
- Message_Function_glBlendFunc = 10,
- Message_Function_glBlendFuncSeparate = 11,
- Message_Function_glBufferData = 12,
- Message_Function_glBufferSubData = 13,
- Message_Function_glCheckFramebufferStatus = 14,
- Message_Function_glClear = 15,
- Message_Function_glClearColor = 16,
- Message_Function_glClearDepthf = 17,
- Message_Function_glClearStencil = 18,
- Message_Function_glColorMask = 19,
- Message_Function_glCompileShader = 20,
- Message_Function_glCompressedTexImage2D = 21,
- Message_Function_glCompressedTexSubImage2D = 22,
- Message_Function_glCopyTexImage2D = 23,
- Message_Function_glCopyTexSubImage2D = 24,
- Message_Function_glCreateProgram = 25,
- Message_Function_glCreateShader = 26,
- Message_Function_glCullFace = 27,
- Message_Function_glDeleteBuffers = 28,
- Message_Function_glDeleteFramebuffers = 29,
- Message_Function_glDeleteProgram = 30,
- Message_Function_glDeleteRenderbuffers = 31,
- Message_Function_glDeleteShader = 32,
- Message_Function_glDeleteTextures = 33,
- Message_Function_glDepthFunc = 34,
- Message_Function_glDepthMask = 35,
- Message_Function_glDepthRangef = 36,
- Message_Function_glDetachShader = 37,
- Message_Function_glDisable = 38,
- Message_Function_glDisableVertexAttribArray = 39,
- Message_Function_glDrawArrays = 40,
- Message_Function_glDrawElements = 41,
- Message_Function_glEnable = 42,
- Message_Function_glEnableVertexAttribArray = 43,
- Message_Function_glFinish = 44,
- Message_Function_glFlush = 45,
- Message_Function_glFramebufferRenderbuffer = 46,
- Message_Function_glFramebufferTexture2D = 47,
- Message_Function_glFrontFace = 48,
- Message_Function_glGenBuffers = 49,
- Message_Function_glGenerateMipmap = 50,
- Message_Function_glGenFramebuffers = 51,
- Message_Function_glGenRenderbuffers = 52,
- Message_Function_glGenTextures = 53,
- Message_Function_glGetActiveAttrib = 54,
- Message_Function_glGetActiveUniform = 55,
- Message_Function_glGetAttachedShaders = 56,
- Message_Function_glGetAttribLocation = 57,
- Message_Function_glGetBooleanv = 58,
- Message_Function_glGetBufferParameteriv = 59,
- Message_Function_glGetError = 60,
- Message_Function_glGetFloatv = 61,
- Message_Function_glGetFramebufferAttachmentParameteriv = 62,
- Message_Function_glGetIntegerv = 63,
- Message_Function_glGetProgramiv = 64,
- Message_Function_glGetProgramInfoLog = 65,
- Message_Function_glGetRenderbufferParameteriv = 66,
- Message_Function_glGetShaderiv = 67,
- Message_Function_glGetShaderInfoLog = 68,
- Message_Function_glGetShaderPrecisionFormat = 69,
- Message_Function_glGetShaderSource = 70,
- Message_Function_glGetString = 71,
- Message_Function_glGetTexParameterfv = 72,
- Message_Function_glGetTexParameteriv = 73,
- Message_Function_glGetUniformfv = 74,
- Message_Function_glGetUniformiv = 75,
- Message_Function_glGetUniformLocation = 76,
- Message_Function_glGetVertexAttribfv = 77,
- Message_Function_glGetVertexAttribiv = 78,
- Message_Function_glGetVertexAttribPointerv = 79,
- Message_Function_glHint = 80,
- Message_Function_glIsBuffer = 81,
- Message_Function_glIsEnabled = 82,
- Message_Function_glIsFramebuffer = 83,
- Message_Function_glIsProgram = 84,
- Message_Function_glIsRenderbuffer = 85,
- Message_Function_glIsShader = 86,
- Message_Function_glIsTexture = 87,
- Message_Function_glLineWidth = 88,
- Message_Function_glLinkProgram = 89,
- Message_Function_glPixelStorei = 90,
- Message_Function_glPolygonOffset = 91,
- Message_Function_glReadPixels = 92,
- Message_Function_glReleaseShaderCompiler = 93,
- Message_Function_glRenderbufferStorage = 94,
- Message_Function_glSampleCoverage = 95,
- Message_Function_glScissor = 96,
- Message_Function_glShaderBinary = 97,
- Message_Function_glShaderSource = 98,
- Message_Function_glStencilFunc = 99,
- Message_Function_glStencilFuncSeparate = 100,
- Message_Function_glStencilMask = 101,
- Message_Function_glStencilMaskSeparate = 102,
- Message_Function_glStencilOp = 103,
- Message_Function_glStencilOpSeparate = 104,
- Message_Function_glTexImage2D = 105,
- Message_Function_glTexParameterf = 106,
- Message_Function_glTexParameterfv = 107,
- Message_Function_glTexParameteri = 108,
- Message_Function_glTexParameteriv = 109,
- Message_Function_glTexSubImage2D = 110,
- Message_Function_glUniform1f = 111,
- Message_Function_glUniform1fv = 112,
- Message_Function_glUniform1i = 113,
- Message_Function_glUniform1iv = 114,
- Message_Function_glUniform2f = 115,
- Message_Function_glUniform2fv = 116,
- Message_Function_glUniform2i = 117,
- Message_Function_glUniform2iv = 118,
- Message_Function_glUniform3f = 119,
- Message_Function_glUniform3fv = 120,
- Message_Function_glUniform3i = 121,
- Message_Function_glUniform3iv = 122,
- Message_Function_glUniform4f = 123,
- Message_Function_glUniform4fv = 124,
- Message_Function_glUniform4i = 125,
- Message_Function_glUniform4iv = 126,
- Message_Function_glUniformMatrix2fv = 127,
- Message_Function_glUniformMatrix3fv = 128,
- Message_Function_glUniformMatrix4fv = 129,
- Message_Function_glUseProgram = 130,
- Message_Function_glValidateProgram = 131,
- Message_Function_glVertexAttrib1f = 132,
- Message_Function_glVertexAttrib1fv = 133,
- Message_Function_glVertexAttrib2f = 134,
- Message_Function_glVertexAttrib2fv = 135,
- Message_Function_glVertexAttrib3f = 136,
- Message_Function_glVertexAttrib3fv = 137,
- Message_Function_glVertexAttrib4f = 138,
- Message_Function_glVertexAttrib4fv = 139,
- Message_Function_glVertexAttribPointer = 140,
- Message_Function_glViewport = 141,
- Message_Function_eglGetDisplay = 142,
- Message_Function_eglInitialize = 143,
- Message_Function_eglTerminate = 144,
- Message_Function_eglGetConfigs = 145,
- Message_Function_eglChooseConfig = 146,
- Message_Function_eglGetConfigAttrib = 147,
- Message_Function_eglCreateWindowSurface = 148,
- Message_Function_eglCreatePixmapSurface = 149,
- Message_Function_eglCreatePbufferSurface = 150,
- Message_Function_eglDestroySurface = 151,
- Message_Function_eglQuerySurface = 152,
- Message_Function_eglCreateContext = 153,
- Message_Function_eglDestroyContext = 154,
- Message_Function_eglMakeCurrent = 155,
- Message_Function_eglGetCurrentContext = 156,
- Message_Function_eglGetCurrentSurface = 157,
- Message_Function_eglGetCurrentDisplay = 158,
- Message_Function_eglQueryContext = 159,
- Message_Function_eglWaitGL = 160,
- Message_Function_eglWaitNative = 161,
- Message_Function_eglSwapBuffers = 162,
- Message_Function_eglCopyBuffers = 163,
- Message_Function_eglGetError = 164,
- Message_Function_eglQueryString = 165,
- Message_Function_eglGetProcAddress = 166,
- Message_Function_eglSurfaceAttrib = 167,
- Message_Function_eglBindTexImage = 168,
- Message_Function_eglReleaseTexImage = 169,
- Message_Function_eglSwapInterval = 170,
- Message_Function_eglBindAPI = 171,
- Message_Function_eglQueryAPI = 172,
- Message_Function_eglWaitClient = 173,
- Message_Function_eglReleaseThread = 174,
- Message_Function_eglCreatePbufferFromClientBuffer = 175,
- Message_Function_eglLockSurfaceKHR = 176,
- Message_Function_eglUnlockSurfaceKHR = 177,
- Message_Function_eglCreateImageKHR = 178,
- Message_Function_eglDestroyImageKHR = 179,
- Message_Function_eglCreateSyncKHR = 180,
- Message_Function_eglDestroySyncKHR = 181,
- Message_Function_eglClientWaitSyncKHR = 182,
- Message_Function_eglGetSyncAttribKHR = 183,
- Message_Function_eglSetSwapRectangleANDROID = 184,
- Message_Function_eglGetRenderBufferANDROID = 185,
- Message_Function_ACK = 186,
- Message_Function_NEG = 187,
- Message_Function_CONTINUE = 188,
- Message_Function_SKIP = 189,
- Message_Function_SETPROP = 190
-};
-bool Message_Function_IsValid(int value);
-const Message_Function Message_Function_Function_MIN = Message_Function_glActiveTexture;
-const Message_Function Message_Function_Function_MAX = Message_Function_SETPROP;
-const int Message_Function_Function_ARRAYSIZE = Message_Function_Function_MAX + 1;
-
-enum Message_Type {
- Message_Type_BeforeCall = 0,
- Message_Type_AfterCall = 1,
- Message_Type_AfterGeneratedCall = 2,
- Message_Type_Response = 3,
- Message_Type_CompleteCall = 4
-};
-bool Message_Type_IsValid(int value);
-const Message_Type Message_Type_Type_MIN = Message_Type_BeforeCall;
-const Message_Type Message_Type_Type_MAX = Message_Type_CompleteCall;
-const int Message_Type_Type_ARRAYSIZE = Message_Type_Type_MAX + 1;
-
-enum Message_DataType {
- Message_DataType_ReferencedImage = 0,
- Message_DataType_NonreferencedImage = 1
-};
-bool Message_DataType_IsValid(int value);
-const Message_DataType Message_DataType_DataType_MIN = Message_DataType_ReferencedImage;
-const Message_DataType Message_DataType_DataType_MAX = Message_DataType_NonreferencedImage;
-const int Message_DataType_DataType_ARRAYSIZE = Message_DataType_DataType_MAX + 1;
-
-enum Message_Prop {
- Message_Prop_CaptureDraw = 0,
- Message_Prop_TimeMode = 1,
- Message_Prop_ExpectResponse = 2,
- Message_Prop_CaptureSwap = 3,
- Message_Prop_GLConstant = 4
-};
-bool Message_Prop_IsValid(int value);
-const Message_Prop Message_Prop_Prop_MIN = Message_Prop_CaptureDraw;
-const Message_Prop Message_Prop_Prop_MAX = Message_Prop_GLConstant;
-const int Message_Prop_Prop_ARRAYSIZE = Message_Prop_Prop_MAX + 1;
-
-// ===================================================================
-
-class Message : public ::google::protobuf::MessageLite {
- public:
- Message();
- virtual ~Message();
-
- Message(const Message& from);
-
- inline Message& operator=(const Message& from) {
- CopyFrom(from);
- return *this;
- }
-
- static const Message& default_instance();
-
- void Swap(Message* other);
-
- // implements Message ----------------------------------------------
-
- Message* New() const;
- void CheckTypeAndMergeFrom(const ::google::protobuf::MessageLite& from);
- void CopyFrom(const Message& from);
- void MergeFrom(const Message& from);
- void Clear();
- bool IsInitialized() const;
-
- int ByteSize() const;
- bool MergePartialFromCodedStream(
- ::google::protobuf::io::CodedInputStream* input);
- void SerializeWithCachedSizes(
- ::google::protobuf::io::CodedOutputStream* output) const;
- int GetCachedSize() const { return _cached_size_; }
- private:
- void SharedCtor();
- void SharedDtor();
- void SetCachedSize(int size) const;
- public:
-
- ::std::string GetTypeName() const;
-
- // nested types ----------------------------------------------------
-
- typedef Message_Function Function;
- static const Function glActiveTexture = Message_Function_glActiveTexture;
- static const Function glAttachShader = Message_Function_glAttachShader;
- static const Function glBindAttribLocation = Message_Function_glBindAttribLocation;
- static const Function glBindBuffer = Message_Function_glBindBuffer;
- static const Function glBindFramebuffer = Message_Function_glBindFramebuffer;
- static const Function glBindRenderbuffer = Message_Function_glBindRenderbuffer;
- static const Function glBindTexture = Message_Function_glBindTexture;
- static const Function glBlendColor = Message_Function_glBlendColor;
- static const Function glBlendEquation = Message_Function_glBlendEquation;
- static const Function glBlendEquationSeparate = Message_Function_glBlendEquationSeparate;
- static const Function glBlendFunc = Message_Function_glBlendFunc;
- static const Function glBlendFuncSeparate = Message_Function_glBlendFuncSeparate;
- static const Function glBufferData = Message_Function_glBufferData;
- static const Function glBufferSubData = Message_Function_glBufferSubData;
- static const Function glCheckFramebufferStatus = Message_Function_glCheckFramebufferStatus;
- static const Function glClear = Message_Function_glClear;
- static const Function glClearColor = Message_Function_glClearColor;
- static const Function glClearDepthf = Message_Function_glClearDepthf;
- static const Function glClearStencil = Message_Function_glClearStencil;
- static const Function glColorMask = Message_Function_glColorMask;
- static const Function glCompileShader = Message_Function_glCompileShader;
- static const Function glCompressedTexImage2D = Message_Function_glCompressedTexImage2D;
- static const Function glCompressedTexSubImage2D = Message_Function_glCompressedTexSubImage2D;
- static const Function glCopyTexImage2D = Message_Function_glCopyTexImage2D;
- static const Function glCopyTexSubImage2D = Message_Function_glCopyTexSubImage2D;
- static const Function glCreateProgram = Message_Function_glCreateProgram;
- static const Function glCreateShader = Message_Function_glCreateShader;
- static const Function glCullFace = Message_Function_glCullFace;
- static const Function glDeleteBuffers = Message_Function_glDeleteBuffers;
- static const Function glDeleteFramebuffers = Message_Function_glDeleteFramebuffers;
- static const Function glDeleteProgram = Message_Function_glDeleteProgram;
- static const Function glDeleteRenderbuffers = Message_Function_glDeleteRenderbuffers;
- static const Function glDeleteShader = Message_Function_glDeleteShader;
- static const Function glDeleteTextures = Message_Function_glDeleteTextures;
- static const Function glDepthFunc = Message_Function_glDepthFunc;
- static const Function glDepthMask = Message_Function_glDepthMask;
- static const Function glDepthRangef = Message_Function_glDepthRangef;
- static const Function glDetachShader = Message_Function_glDetachShader;
- static const Function glDisable = Message_Function_glDisable;
- static const Function glDisableVertexAttribArray = Message_Function_glDisableVertexAttribArray;
- static const Function glDrawArrays = Message_Function_glDrawArrays;
- static const Function glDrawElements = Message_Function_glDrawElements;
- static const Function glEnable = Message_Function_glEnable;
- static const Function glEnableVertexAttribArray = Message_Function_glEnableVertexAttribArray;
- static const Function glFinish = Message_Function_glFinish;
- static const Function glFlush = Message_Function_glFlush;
- static const Function glFramebufferRenderbuffer = Message_Function_glFramebufferRenderbuffer;
- static const Function glFramebufferTexture2D = Message_Function_glFramebufferTexture2D;
- static const Function glFrontFace = Message_Function_glFrontFace;
- static const Function glGenBuffers = Message_Function_glGenBuffers;
- static const Function glGenerateMipmap = Message_Function_glGenerateMipmap;
- static const Function glGenFramebuffers = Message_Function_glGenFramebuffers;
- static const Function glGenRenderbuffers = Message_Function_glGenRenderbuffers;
- static const Function glGenTextures = Message_Function_glGenTextures;
- static const Function glGetActiveAttrib = Message_Function_glGetActiveAttrib;
- static const Function glGetActiveUniform = Message_Function_glGetActiveUniform;
- static const Function glGetAttachedShaders = Message_Function_glGetAttachedShaders;
- static const Function glGetAttribLocation = Message_Function_glGetAttribLocation;
- static const Function glGetBooleanv = Message_Function_glGetBooleanv;
- static const Function glGetBufferParameteriv = Message_Function_glGetBufferParameteriv;
- static const Function glGetError = Message_Function_glGetError;
- static const Function glGetFloatv = Message_Function_glGetFloatv;
- static const Function glGetFramebufferAttachmentParameteriv = Message_Function_glGetFramebufferAttachmentParameteriv;
- static const Function glGetIntegerv = Message_Function_glGetIntegerv;
- static const Function glGetProgramiv = Message_Function_glGetProgramiv;
- static const Function glGetProgramInfoLog = Message_Function_glGetProgramInfoLog;
- static const Function glGetRenderbufferParameteriv = Message_Function_glGetRenderbufferParameteriv;
- static const Function glGetShaderiv = Message_Function_glGetShaderiv;
- static const Function glGetShaderInfoLog = Message_Function_glGetShaderInfoLog;
- static const Function glGetShaderPrecisionFormat = Message_Function_glGetShaderPrecisionFormat;
- static const Function glGetShaderSource = Message_Function_glGetShaderSource;
- static const Function glGetString = Message_Function_glGetString;
- static const Function glGetTexParameterfv = Message_Function_glGetTexParameterfv;
- static const Function glGetTexParameteriv = Message_Function_glGetTexParameteriv;
- static const Function glGetUniformfv = Message_Function_glGetUniformfv;
- static const Function glGetUniformiv = Message_Function_glGetUniformiv;
- static const Function glGetUniformLocation = Message_Function_glGetUniformLocation;
- static const Function glGetVertexAttribfv = Message_Function_glGetVertexAttribfv;
- static const Function glGetVertexAttribiv = Message_Function_glGetVertexAttribiv;
- static const Function glGetVertexAttribPointerv = Message_Function_glGetVertexAttribPointerv;
- static const Function glHint = Message_Function_glHint;
- static const Function glIsBuffer = Message_Function_glIsBuffer;
- static const Function glIsEnabled = Message_Function_glIsEnabled;
- static const Function glIsFramebuffer = Message_Function_glIsFramebuffer;
- static const Function glIsProgram = Message_Function_glIsProgram;
- static const Function glIsRenderbuffer = Message_Function_glIsRenderbuffer;
- static const Function glIsShader = Message_Function_glIsShader;
- static const Function glIsTexture = Message_Function_glIsTexture;
- static const Function glLineWidth = Message_Function_glLineWidth;
- static const Function glLinkProgram = Message_Function_glLinkProgram;
- static const Function glPixelStorei = Message_Function_glPixelStorei;
- static const Function glPolygonOffset = Message_Function_glPolygonOffset;
- static const Function glReadPixels = Message_Function_glReadPixels;
- static const Function glReleaseShaderCompiler = Message_Function_glReleaseShaderCompiler;
- static const Function glRenderbufferStorage = Message_Function_glRenderbufferStorage;
- static const Function glSampleCoverage = Message_Function_glSampleCoverage;
- static const Function glScissor = Message_Function_glScissor;
- static const Function glShaderBinary = Message_Function_glShaderBinary;
- static const Function glShaderSource = Message_Function_glShaderSource;
- static const Function glStencilFunc = Message_Function_glStencilFunc;
- static const Function glStencilFuncSeparate = Message_Function_glStencilFuncSeparate;
- static const Function glStencilMask = Message_Function_glStencilMask;
- static const Function glStencilMaskSeparate = Message_Function_glStencilMaskSeparate;
- static const Function glStencilOp = Message_Function_glStencilOp;
- static const Function glStencilOpSeparate = Message_Function_glStencilOpSeparate;
- static const Function glTexImage2D = Message_Function_glTexImage2D;
- static const Function glTexParameterf = Message_Function_glTexParameterf;
- static const Function glTexParameterfv = Message_Function_glTexParameterfv;
- static const Function glTexParameteri = Message_Function_glTexParameteri;
- static const Function glTexParameteriv = Message_Function_glTexParameteriv;
- static const Function glTexSubImage2D = Message_Function_glTexSubImage2D;
- static const Function glUniform1f = Message_Function_glUniform1f;
- static const Function glUniform1fv = Message_Function_glUniform1fv;
- static const Function glUniform1i = Message_Function_glUniform1i;
- static const Function glUniform1iv = Message_Function_glUniform1iv;
- static const Function glUniform2f = Message_Function_glUniform2f;
- static const Function glUniform2fv = Message_Function_glUniform2fv;
- static const Function glUniform2i = Message_Function_glUniform2i;
- static const Function glUniform2iv = Message_Function_glUniform2iv;
- static const Function glUniform3f = Message_Function_glUniform3f;
- static const Function glUniform3fv = Message_Function_glUniform3fv;
- static const Function glUniform3i = Message_Function_glUniform3i;
- static const Function glUniform3iv = Message_Function_glUniform3iv;
- static const Function glUniform4f = Message_Function_glUniform4f;
- static const Function glUniform4fv = Message_Function_glUniform4fv;
- static const Function glUniform4i = Message_Function_glUniform4i;
- static const Function glUniform4iv = Message_Function_glUniform4iv;
- static const Function glUniformMatrix2fv = Message_Function_glUniformMatrix2fv;
- static const Function glUniformMatrix3fv = Message_Function_glUniformMatrix3fv;
- static const Function glUniformMatrix4fv = Message_Function_glUniformMatrix4fv;
- static const Function glUseProgram = Message_Function_glUseProgram;
- static const Function glValidateProgram = Message_Function_glValidateProgram;
- static const Function glVertexAttrib1f = Message_Function_glVertexAttrib1f;
- static const Function glVertexAttrib1fv = Message_Function_glVertexAttrib1fv;
- static const Function glVertexAttrib2f = Message_Function_glVertexAttrib2f;
- static const Function glVertexAttrib2fv = Message_Function_glVertexAttrib2fv;
- static const Function glVertexAttrib3f = Message_Function_glVertexAttrib3f;
- static const Function glVertexAttrib3fv = Message_Function_glVertexAttrib3fv;
- static const Function glVertexAttrib4f = Message_Function_glVertexAttrib4f;
- static const Function glVertexAttrib4fv = Message_Function_glVertexAttrib4fv;
- static const Function glVertexAttribPointer = Message_Function_glVertexAttribPointer;
- static const Function glViewport = Message_Function_glViewport;
- static const Function eglGetDisplay = Message_Function_eglGetDisplay;
- static const Function eglInitialize = Message_Function_eglInitialize;
- static const Function eglTerminate = Message_Function_eglTerminate;
- static const Function eglGetConfigs = Message_Function_eglGetConfigs;
- static const Function eglChooseConfig = Message_Function_eglChooseConfig;
- static const Function eglGetConfigAttrib = Message_Function_eglGetConfigAttrib;
- static const Function eglCreateWindowSurface = Message_Function_eglCreateWindowSurface;
- static const Function eglCreatePixmapSurface = Message_Function_eglCreatePixmapSurface;
- static const Function eglCreatePbufferSurface = Message_Function_eglCreatePbufferSurface;
- static const Function eglDestroySurface = Message_Function_eglDestroySurface;
- static const Function eglQuerySurface = Message_Function_eglQuerySurface;
- static const Function eglCreateContext = Message_Function_eglCreateContext;
- static const Function eglDestroyContext = Message_Function_eglDestroyContext;
- static const Function eglMakeCurrent = Message_Function_eglMakeCurrent;
- static const Function eglGetCurrentContext = Message_Function_eglGetCurrentContext;
- static const Function eglGetCurrentSurface = Message_Function_eglGetCurrentSurface;
- static const Function eglGetCurrentDisplay = Message_Function_eglGetCurrentDisplay;
- static const Function eglQueryContext = Message_Function_eglQueryContext;
- static const Function eglWaitGL = Message_Function_eglWaitGL;
- static const Function eglWaitNative = Message_Function_eglWaitNative;
- static const Function eglSwapBuffers = Message_Function_eglSwapBuffers;
- static const Function eglCopyBuffers = Message_Function_eglCopyBuffers;
- static const Function eglGetError = Message_Function_eglGetError;
- static const Function eglQueryString = Message_Function_eglQueryString;
- static const Function eglGetProcAddress = Message_Function_eglGetProcAddress;
- static const Function eglSurfaceAttrib = Message_Function_eglSurfaceAttrib;
- static const Function eglBindTexImage = Message_Function_eglBindTexImage;
- static const Function eglReleaseTexImage = Message_Function_eglReleaseTexImage;
- static const Function eglSwapInterval = Message_Function_eglSwapInterval;
- static const Function eglBindAPI = Message_Function_eglBindAPI;
- static const Function eglQueryAPI = Message_Function_eglQueryAPI;
- static const Function eglWaitClient = Message_Function_eglWaitClient;
- static const Function eglReleaseThread = Message_Function_eglReleaseThread;
- static const Function eglCreatePbufferFromClientBuffer = Message_Function_eglCreatePbufferFromClientBuffer;
- static const Function eglLockSurfaceKHR = Message_Function_eglLockSurfaceKHR;
- static const Function eglUnlockSurfaceKHR = Message_Function_eglUnlockSurfaceKHR;
- static const Function eglCreateImageKHR = Message_Function_eglCreateImageKHR;
- static const Function eglDestroyImageKHR = Message_Function_eglDestroyImageKHR;
- static const Function eglCreateSyncKHR = Message_Function_eglCreateSyncKHR;
- static const Function eglDestroySyncKHR = Message_Function_eglDestroySyncKHR;
- static const Function eglClientWaitSyncKHR = Message_Function_eglClientWaitSyncKHR;
- static const Function eglGetSyncAttribKHR = Message_Function_eglGetSyncAttribKHR;
- static const Function eglSetSwapRectangleANDROID = Message_Function_eglSetSwapRectangleANDROID;
- static const Function eglGetRenderBufferANDROID = Message_Function_eglGetRenderBufferANDROID;
- static const Function ACK = Message_Function_ACK;
- static const Function NEG = Message_Function_NEG;
- static const Function CONTINUE = Message_Function_CONTINUE;
- static const Function SKIP = Message_Function_SKIP;
- static const Function SETPROP = Message_Function_SETPROP;
- static inline bool Function_IsValid(int value) {
- return Message_Function_IsValid(value);
- }
- static const Function Function_MIN =
- Message_Function_Function_MIN;
- static const Function Function_MAX =
- Message_Function_Function_MAX;
- static const int Function_ARRAYSIZE =
- Message_Function_Function_ARRAYSIZE;
-
- typedef Message_Type Type;
- static const Type BeforeCall = Message_Type_BeforeCall;
- static const Type AfterCall = Message_Type_AfterCall;
- static const Type AfterGeneratedCall = Message_Type_AfterGeneratedCall;
- static const Type Response = Message_Type_Response;
- static const Type CompleteCall = Message_Type_CompleteCall;
- static inline bool Type_IsValid(int value) {
- return Message_Type_IsValid(value);
- }
- static const Type Type_MIN =
- Message_Type_Type_MIN;
- static const Type Type_MAX =
- Message_Type_Type_MAX;
- static const int Type_ARRAYSIZE =
- Message_Type_Type_ARRAYSIZE;
-
- typedef Message_DataType DataType;
- static const DataType ReferencedImage = Message_DataType_ReferencedImage;
- static const DataType NonreferencedImage = Message_DataType_NonreferencedImage;
- static inline bool DataType_IsValid(int value) {
- return Message_DataType_IsValid(value);
- }
- static const DataType DataType_MIN =
- Message_DataType_DataType_MIN;
- static const DataType DataType_MAX =
- Message_DataType_DataType_MAX;
- static const int DataType_ARRAYSIZE =
- Message_DataType_DataType_ARRAYSIZE;
-
- typedef Message_Prop Prop;
- static const Prop CaptureDraw = Message_Prop_CaptureDraw;
- static const Prop TimeMode = Message_Prop_TimeMode;
- static const Prop ExpectResponse = Message_Prop_ExpectResponse;
- static const Prop CaptureSwap = Message_Prop_CaptureSwap;
- static const Prop GLConstant = Message_Prop_GLConstant;
- static inline bool Prop_IsValid(int value) {
- return Message_Prop_IsValid(value);
- }
- static const Prop Prop_MIN =
- Message_Prop_Prop_MIN;
- static const Prop Prop_MAX =
- Message_Prop_Prop_MAX;
- static const int Prop_ARRAYSIZE =
- Message_Prop_Prop_ARRAYSIZE;
-
- // accessors -------------------------------------------------------
-
- // required int32 context_id = 1;
- inline bool has_context_id() const;
- inline void clear_context_id();
- static const int kContextIdFieldNumber = 1;
- inline ::google::protobuf::int32 context_id() const;
- inline void set_context_id(::google::protobuf::int32 value);
-
- // required .com.android.glesv2debugger.Message.Function function = 2 [default = NEG];
- inline bool has_function() const;
- inline void clear_function();
- static const int kFunctionFieldNumber = 2;
- inline ::com::android::glesv2debugger::Message_Function function() const;
- inline void set_function(::com::android::glesv2debugger::Message_Function value);
-
- // required .com.android.glesv2debugger.Message.Type type = 3;
- inline bool has_type() const;
- inline void clear_type();
- static const int kTypeFieldNumber = 3;
- inline ::com::android::glesv2debugger::Message_Type type() const;
- inline void set_type(::com::android::glesv2debugger::Message_Type value);
-
- // required bool expect_response = 4;
- inline bool has_expect_response() const;
- inline void clear_expect_response();
- static const int kExpectResponseFieldNumber = 4;
- inline bool expect_response() const;
- inline void set_expect_response(bool value);
-
- // optional int32 ret = 5;
- inline bool has_ret() const;
- inline void clear_ret();
- static const int kRetFieldNumber = 5;
- inline ::google::protobuf::int32 ret() const;
- inline void set_ret(::google::protobuf::int32 value);
-
- // optional int32 arg0 = 6;
- inline bool has_arg0() const;
- inline void clear_arg0();
- static const int kArg0FieldNumber = 6;
- inline ::google::protobuf::int32 arg0() const;
- inline void set_arg0(::google::protobuf::int32 value);
-
- // optional int32 arg1 = 7;
- inline bool has_arg1() const;
- inline void clear_arg1();
- static const int kArg1FieldNumber = 7;
- inline ::google::protobuf::int32 arg1() const;
- inline void set_arg1(::google::protobuf::int32 value);
-
- // optional int32 arg2 = 8;
- inline bool has_arg2() const;
- inline void clear_arg2();
- static const int kArg2FieldNumber = 8;
- inline ::google::protobuf::int32 arg2() const;
- inline void set_arg2(::google::protobuf::int32 value);
-
- // optional int32 arg3 = 9;
- inline bool has_arg3() const;
- inline void clear_arg3();
- static const int kArg3FieldNumber = 9;
- inline ::google::protobuf::int32 arg3() const;
- inline void set_arg3(::google::protobuf::int32 value);
-
- // optional int32 arg4 = 16;
- inline bool has_arg4() const;
- inline void clear_arg4();
- static const int kArg4FieldNumber = 16;
- inline ::google::protobuf::int32 arg4() const;
- inline void set_arg4(::google::protobuf::int32 value);
-
- // optional int32 arg5 = 17;
- inline bool has_arg5() const;
- inline void clear_arg5();
- static const int kArg5FieldNumber = 17;
- inline ::google::protobuf::int32 arg5() const;
- inline void set_arg5(::google::protobuf::int32 value);
-
- // optional int32 arg6 = 18;
- inline bool has_arg6() const;
- inline void clear_arg6();
- static const int kArg6FieldNumber = 18;
- inline ::google::protobuf::int32 arg6() const;
- inline void set_arg6(::google::protobuf::int32 value);
-
- // optional int32 arg7 = 19;
- inline bool has_arg7() const;
- inline void clear_arg7();
- static const int kArg7FieldNumber = 19;
- inline ::google::protobuf::int32 arg7() const;
- inline void set_arg7(::google::protobuf::int32 value);
-
- // optional int32 arg8 = 20;
- inline bool has_arg8() const;
- inline void clear_arg8();
- static const int kArg8FieldNumber = 20;
- inline ::google::protobuf::int32 arg8() const;
- inline void set_arg8(::google::protobuf::int32 value);
-
- // optional bytes data = 10;
- inline bool has_data() const;
- inline void clear_data();
- static const int kDataFieldNumber = 10;
- inline const ::std::string& data() const;
- inline void set_data(const ::std::string& value);
- inline void set_data(const char* value);
- inline void set_data(const void* value, size_t size);
- inline ::std::string* mutable_data();
-
- // optional .com.android.glesv2debugger.Message.DataType data_type = 23;
- inline bool has_data_type() const;
- inline void clear_data_type();
- static const int kDataTypeFieldNumber = 23;
- inline ::com::android::glesv2debugger::Message_DataType data_type() const;
- inline void set_data_type(::com::android::glesv2debugger::Message_DataType value);
-
- // optional int32 pixel_format = 24;
- inline bool has_pixel_format() const;
- inline void clear_pixel_format();
- static const int kPixelFormatFieldNumber = 24;
- inline ::google::protobuf::int32 pixel_format() const;
- inline void set_pixel_format(::google::protobuf::int32 value);
-
- // optional int32 pixel_type = 25;
- inline bool has_pixel_type() const;
- inline void clear_pixel_type();
- static const int kPixelTypeFieldNumber = 25;
- inline ::google::protobuf::int32 pixel_type() const;
- inline void set_pixel_type(::google::protobuf::int32 value);
-
- // optional int32 image_width = 26;
- inline bool has_image_width() const;
- inline void clear_image_width();
- static const int kImageWidthFieldNumber = 26;
- inline ::google::protobuf::int32 image_width() const;
- inline void set_image_width(::google::protobuf::int32 value);
-
- // optional int32 image_height = 27;
- inline bool has_image_height() const;
- inline void clear_image_height();
- static const int kImageHeightFieldNumber = 27;
- inline ::google::protobuf::int32 image_height() const;
- inline void set_image_height(::google::protobuf::int32 value);
-
- // optional float time = 11;
- inline bool has_time() const;
- inline void clear_time();
- static const int kTimeFieldNumber = 11;
- inline float time() const;
- inline void set_time(float value);
-
- // optional .com.android.glesv2debugger.Message.Prop prop = 21;
- inline bool has_prop() const;
- inline void clear_prop();
- static const int kPropFieldNumber = 21;
- inline ::com::android::glesv2debugger::Message_Prop prop() const;
- inline void set_prop(::com::android::glesv2debugger::Message_Prop value);
-
- // optional float clock = 22;
- inline bool has_clock() const;
- inline void clear_clock();
- static const int kClockFieldNumber = 22;
- inline float clock() const;
- inline void set_clock(float value);
-
- // @@protoc_insertion_point(class_scope:com.android.glesv2debugger.Message)
- private:
- mutable int _cached_size_;
-
- ::google::protobuf::int32 context_id_;
- int function_;
- int type_;
- bool expect_response_;
- ::google::protobuf::int32 ret_;
- ::google::protobuf::int32 arg0_;
- ::google::protobuf::int32 arg1_;
- ::google::protobuf::int32 arg2_;
- ::google::protobuf::int32 arg3_;
- ::google::protobuf::int32 arg4_;
- ::google::protobuf::int32 arg5_;
- ::google::protobuf::int32 arg6_;
- ::google::protobuf::int32 arg7_;
- ::google::protobuf::int32 arg8_;
- ::std::string* data_;
- static const ::std::string _default_data_;
- int data_type_;
- ::google::protobuf::int32 pixel_format_;
- ::google::protobuf::int32 pixel_type_;
- ::google::protobuf::int32 image_width_;
- ::google::protobuf::int32 image_height_;
- float time_;
- int prop_;
- float clock_;
- friend void protobuf_AddDesc_debugger_5fmessage_2eproto();
- friend void protobuf_AssignDesc_debugger_5fmessage_2eproto();
- friend void protobuf_ShutdownFile_debugger_5fmessage_2eproto();
-
- ::google::protobuf::uint32 _has_bits_[(23 + 31) / 32];
-
- // WHY DOES & HAVE LOWER PRECEDENCE THAN != !?
- inline bool _has_bit(int index) const {
- return (_has_bits_[index / 32] & (1u << (index % 32))) != 0;
- }
- inline void _set_bit(int index) {
- _has_bits_[index / 32] |= (1u << (index % 32));
- }
- inline void _clear_bit(int index) {
- _has_bits_[index / 32] &= ~(1u << (index % 32));
- }
-
- void InitAsDefaultInstance();
- static Message* default_instance_;
-};
-// ===================================================================
-
-
-// ===================================================================
-
-// Message
-
-// required int32 context_id = 1;
-inline bool Message::has_context_id() const {
- return _has_bit(0);
-}
-inline void Message::clear_context_id() {
- context_id_ = 0;
- _clear_bit(0);
-}
-inline ::google::protobuf::int32 Message::context_id() const {
- return context_id_;
-}
-inline void Message::set_context_id(::google::protobuf::int32 value) {
- _set_bit(0);
- context_id_ = value;
-}
-
-// required .com.android.glesv2debugger.Message.Function function = 2 [default = NEG];
-inline bool Message::has_function() const {
- return _has_bit(1);
-}
-inline void Message::clear_function() {
- function_ = 187;
- _clear_bit(1);
-}
-inline ::com::android::glesv2debugger::Message_Function Message::function() const {
- return static_cast< ::com::android::glesv2debugger::Message_Function >(function_);
-}
-inline void Message::set_function(::com::android::glesv2debugger::Message_Function value) {
- GOOGLE_DCHECK(::com::android::glesv2debugger::Message_Function_IsValid(value));
- _set_bit(1);
- function_ = value;
-}
-
-// required .com.android.glesv2debugger.Message.Type type = 3;
-inline bool Message::has_type() const {
- return _has_bit(2);
-}
-inline void Message::clear_type() {
- type_ = 0;
- _clear_bit(2);
-}
-inline ::com::android::glesv2debugger::Message_Type Message::type() const {
- return static_cast< ::com::android::glesv2debugger::Message_Type >(type_);
-}
-inline void Message::set_type(::com::android::glesv2debugger::Message_Type value) {
- GOOGLE_DCHECK(::com::android::glesv2debugger::Message_Type_IsValid(value));
- _set_bit(2);
- type_ = value;
-}
-
-// required bool expect_response = 4;
-inline bool Message::has_expect_response() const {
- return _has_bit(3);
-}
-inline void Message::clear_expect_response() {
- expect_response_ = false;
- _clear_bit(3);
-}
-inline bool Message::expect_response() const {
- return expect_response_;
-}
-inline void Message::set_expect_response(bool value) {
- _set_bit(3);
- expect_response_ = value;
-}
-
-// optional int32 ret = 5;
-inline bool Message::has_ret() const {
- return _has_bit(4);
-}
-inline void Message::clear_ret() {
- ret_ = 0;
- _clear_bit(4);
-}
-inline ::google::protobuf::int32 Message::ret() const {
- return ret_;
-}
-inline void Message::set_ret(::google::protobuf::int32 value) {
- _set_bit(4);
- ret_ = value;
-}
-
-// optional int32 arg0 = 6;
-inline bool Message::has_arg0() const {
- return _has_bit(5);
-}
-inline void Message::clear_arg0() {
- arg0_ = 0;
- _clear_bit(5);
-}
-inline ::google::protobuf::int32 Message::arg0() const {
- return arg0_;
-}
-inline void Message::set_arg0(::google::protobuf::int32 value) {
- _set_bit(5);
- arg0_ = value;
-}
-
-// optional int32 arg1 = 7;
-inline bool Message::has_arg1() const {
- return _has_bit(6);
-}
-inline void Message::clear_arg1() {
- arg1_ = 0;
- _clear_bit(6);
-}
-inline ::google::protobuf::int32 Message::arg1() const {
- return arg1_;
-}
-inline void Message::set_arg1(::google::protobuf::int32 value) {
- _set_bit(6);
- arg1_ = value;
-}
-
-// optional int32 arg2 = 8;
-inline bool Message::has_arg2() const {
- return _has_bit(7);
-}
-inline void Message::clear_arg2() {
- arg2_ = 0;
- _clear_bit(7);
-}
-inline ::google::protobuf::int32 Message::arg2() const {
- return arg2_;
-}
-inline void Message::set_arg2(::google::protobuf::int32 value) {
- _set_bit(7);
- arg2_ = value;
-}
-
-// optional int32 arg3 = 9;
-inline bool Message::has_arg3() const {
- return _has_bit(8);
-}
-inline void Message::clear_arg3() {
- arg3_ = 0;
- _clear_bit(8);
-}
-inline ::google::protobuf::int32 Message::arg3() const {
- return arg3_;
-}
-inline void Message::set_arg3(::google::protobuf::int32 value) {
- _set_bit(8);
- arg3_ = value;
-}
-
-// optional int32 arg4 = 16;
-inline bool Message::has_arg4() const {
- return _has_bit(9);
-}
-inline void Message::clear_arg4() {
- arg4_ = 0;
- _clear_bit(9);
-}
-inline ::google::protobuf::int32 Message::arg4() const {
- return arg4_;
-}
-inline void Message::set_arg4(::google::protobuf::int32 value) {
- _set_bit(9);
- arg4_ = value;
-}
-
-// optional int32 arg5 = 17;
-inline bool Message::has_arg5() const {
- return _has_bit(10);
-}
-inline void Message::clear_arg5() {
- arg5_ = 0;
- _clear_bit(10);
-}
-inline ::google::protobuf::int32 Message::arg5() const {
- return arg5_;
-}
-inline void Message::set_arg5(::google::protobuf::int32 value) {
- _set_bit(10);
- arg5_ = value;
-}
-
-// optional int32 arg6 = 18;
-inline bool Message::has_arg6() const {
- return _has_bit(11);
-}
-inline void Message::clear_arg6() {
- arg6_ = 0;
- _clear_bit(11);
-}
-inline ::google::protobuf::int32 Message::arg6() const {
- return arg6_;
-}
-inline void Message::set_arg6(::google::protobuf::int32 value) {
- _set_bit(11);
- arg6_ = value;
-}
-
-// optional int32 arg7 = 19;
-inline bool Message::has_arg7() const {
- return _has_bit(12);
-}
-inline void Message::clear_arg7() {
- arg7_ = 0;
- _clear_bit(12);
-}
-inline ::google::protobuf::int32 Message::arg7() const {
- return arg7_;
-}
-inline void Message::set_arg7(::google::protobuf::int32 value) {
- _set_bit(12);
- arg7_ = value;
-}
-
-// optional int32 arg8 = 20;
-inline bool Message::has_arg8() const {
- return _has_bit(13);
-}
-inline void Message::clear_arg8() {
- arg8_ = 0;
- _clear_bit(13);
-}
-inline ::google::protobuf::int32 Message::arg8() const {
- return arg8_;
-}
-inline void Message::set_arg8(::google::protobuf::int32 value) {
- _set_bit(13);
- arg8_ = value;
-}
-
-// optional bytes data = 10;
-inline bool Message::has_data() const {
- return _has_bit(14);
-}
-inline void Message::clear_data() {
- if (data_ != &_default_data_) {
- data_->clear();
- }
- _clear_bit(14);
-}
-inline const ::std::string& Message::data() const {
- return *data_;
-}
-inline void Message::set_data(const ::std::string& value) {
- _set_bit(14);
- if (data_ == &_default_data_) {
- data_ = new ::std::string;
- }
- data_->assign(value);
-}
-inline void Message::set_data(const char* value) {
- _set_bit(14);
- if (data_ == &_default_data_) {
- data_ = new ::std::string;
- }
- data_->assign(value);
-}
-inline void Message::set_data(const void* value, size_t size) {
- _set_bit(14);
- if (data_ == &_default_data_) {
- data_ = new ::std::string;
- }
- data_->assign(reinterpret_cast<const char*>(value), size);
-}
-inline ::std::string* Message::mutable_data() {
- _set_bit(14);
- if (data_ == &_default_data_) {
- data_ = new ::std::string;
- }
- return data_;
-}
-
-// optional .com.android.glesv2debugger.Message.DataType data_type = 23;
-inline bool Message::has_data_type() const {
- return _has_bit(15);
-}
-inline void Message::clear_data_type() {
- data_type_ = 0;
- _clear_bit(15);
-}
-inline ::com::android::glesv2debugger::Message_DataType Message::data_type() const {
- return static_cast< ::com::android::glesv2debugger::Message_DataType >(data_type_);
-}
-inline void Message::set_data_type(::com::android::glesv2debugger::Message_DataType value) {
- GOOGLE_DCHECK(::com::android::glesv2debugger::Message_DataType_IsValid(value));
- _set_bit(15);
- data_type_ = value;
-}
-
-// optional int32 pixel_format = 24;
-inline bool Message::has_pixel_format() const {
- return _has_bit(16);
-}
-inline void Message::clear_pixel_format() {
- pixel_format_ = 0;
- _clear_bit(16);
-}
-inline ::google::protobuf::int32 Message::pixel_format() const {
- return pixel_format_;
-}
-inline void Message::set_pixel_format(::google::protobuf::int32 value) {
- _set_bit(16);
- pixel_format_ = value;
-}
-
-// optional int32 pixel_type = 25;
-inline bool Message::has_pixel_type() const {
- return _has_bit(17);
-}
-inline void Message::clear_pixel_type() {
- pixel_type_ = 0;
- _clear_bit(17);
-}
-inline ::google::protobuf::int32 Message::pixel_type() const {
- return pixel_type_;
-}
-inline void Message::set_pixel_type(::google::protobuf::int32 value) {
- _set_bit(17);
- pixel_type_ = value;
-}
-
-// optional int32 image_width = 26;
-inline bool Message::has_image_width() const {
- return _has_bit(18);
-}
-inline void Message::clear_image_width() {
- image_width_ = 0;
- _clear_bit(18);
-}
-inline ::google::protobuf::int32 Message::image_width() const {
- return image_width_;
-}
-inline void Message::set_image_width(::google::protobuf::int32 value) {
- _set_bit(18);
- image_width_ = value;
-}
-
-// optional int32 image_height = 27;
-inline bool Message::has_image_height() const {
- return _has_bit(19);
-}
-inline void Message::clear_image_height() {
- image_height_ = 0;
- _clear_bit(19);
-}
-inline ::google::protobuf::int32 Message::image_height() const {
- return image_height_;
-}
-inline void Message::set_image_height(::google::protobuf::int32 value) {
- _set_bit(19);
- image_height_ = value;
-}
-
-// optional float time = 11;
-inline bool Message::has_time() const {
- return _has_bit(20);
-}
-inline void Message::clear_time() {
- time_ = 0;
- _clear_bit(20);
-}
-inline float Message::time() const {
- return time_;
-}
-inline void Message::set_time(float value) {
- _set_bit(20);
- time_ = value;
-}
-
-// optional .com.android.glesv2debugger.Message.Prop prop = 21;
-inline bool Message::has_prop() const {
- return _has_bit(21);
-}
-inline void Message::clear_prop() {
- prop_ = 0;
- _clear_bit(21);
-}
-inline ::com::android::glesv2debugger::Message_Prop Message::prop() const {
- return static_cast< ::com::android::glesv2debugger::Message_Prop >(prop_);
-}
-inline void Message::set_prop(::com::android::glesv2debugger::Message_Prop value) {
- GOOGLE_DCHECK(::com::android::glesv2debugger::Message_Prop_IsValid(value));
- _set_bit(21);
- prop_ = value;
-}
-
-// optional float clock = 22;
-inline bool Message::has_clock() const {
- return _has_bit(22);
-}
-inline void Message::clear_clock() {
- clock_ = 0;
- _clear_bit(22);
-}
-inline float Message::clock() const {
- return clock_;
-}
-inline void Message::set_clock(float value) {
- _set_bit(22);
- clock_ = value;
-}
-
-
-// @@protoc_insertion_point(namespace_scope)
-
-} // namespace glesv2debugger
-} // namespace android
-} // namespace com
-
-// @@protoc_insertion_point(global_scope)
-
-#endif // PROTOBUF_debugger_5fmessage_2eproto__INCLUDED
diff --git a/opengl/libs/GLES2_dbg/src/egl.cpp b/opengl/libs/GLES2_dbg/src/egl.cpp
deleted file mode 100644
index bbea3bd..0000000
--- a/opengl/libs/GLES2_dbg/src/egl.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-#include "header.h"
-
-EGLBoolean Debug_eglSwapBuffers(EGLDisplay dpy, EGLSurface draw)
-{
- DbgContext * const dbg = getDbgContextThreadSpecific();
- glesv2debugger::Message msg;
- struct : public FunctionCall {
- EGLDisplay dpy;
- EGLSurface draw;
-
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- msg.set_time(-1);
- return reinterpret_cast<const int *>(true);
- }
- } caller;
- caller.dpy = dpy;
- caller.draw = draw;
-
- msg.set_arg0(reinterpret_cast<int>(dpy));
- msg.set_arg1(reinterpret_cast<int>(draw));
- if (dbg->captureSwap > 0) {
- dbg->captureSwap--;
- int viewport[4] = {};
- dbg->hooks->gl.glGetIntegerv(GL_VIEWPORT, viewport);
- void * pixels = dbg->GetReadPixelsBuffer(viewport[2] * viewport[3] *
- dbg->readBytesPerPixel);
- dbg->hooks->gl.glReadPixels(viewport[0], viewport[1], viewport[2],
- viewport[3], GL_RGBA, GL_UNSIGNED_BYTE, pixels);
- dbg->CompressReadPixelBuffer(msg.mutable_data());
- msg.set_data_type(msg.ReferencedImage);
- msg.set_pixel_format(GL_RGBA);
- msg.set_pixel_type(GL_UNSIGNED_BYTE);
- msg.set_image_width(viewport[2]);
- msg.set_image_height(viewport[3]);
- }
- int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_eglSwapBuffers);
- return static_cast<EGLBoolean>(reinterpret_cast<int>(ret));
-}
diff --git a/opengl/libs/GLES2_dbg/src/header.h b/opengl/libs/GLES2_dbg/src/header.h
deleted file mode 100644
index 0ab4890..0000000
--- a/opengl/libs/GLES2_dbg/src/header.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-#ifndef ANDROID_GLES2_DBG_HEADER_H
-#define ANDROID_GLES2_DBG_HEADER_H
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#include <errno.h>
-
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-
-#include <cutils/log.h>
-#include <utils/Timers.h>
-
-#include "hooks.h"
-
-#include "glesv2dbg.h"
-
-#define GL_ENTRY(_r, _api, ...) _r Debug_##_api ( __VA_ARGS__ );
-#include "glesv2dbg_functions.h"
-
-#include "debugger_message.pb.h"
-
-using namespace android;
-using namespace com::android;
-
-#ifndef __location__
-#define __HIERALLOC_STRING_0__(s) #s
-#define __HIERALLOC_STRING_1__(s) __HIERALLOC_STRING_0__(s)
-#define __HIERALLOC_STRING_2__ __HIERALLOC_STRING_1__(__LINE__)
-#define __location__ __FILE__ ":" __HIERALLOC_STRING_2__
-#endif
-
-#undef assert
-#define assert(expr) if (!(expr)) { ALOGD("\n*\n*\n* assert: %s at %s \n*\n*", #expr, __location__); int * x = 0; *x = 5; }
-//#undef ALOGD
-//#define ALOGD(...)
-
-namespace android
-{
-
-struct GLFunctionBitfield {
- unsigned char field [24]; // 8 * 24 = 192
-
- void Bit(const glesv2debugger::Message_Function function, bool bit) {
- const unsigned byte = function / 8, mask = 1 << (function % 8);
- if (bit)
- field[byte] |= mask;
- else
- field[byte] &= ~mask;
- }
-
- bool Bit(const glesv2debugger::Message_Function function) const {
- const unsigned byte = function / 8, mask = 1 << (function % 8);
- return field[byte] & mask;
- }
-};
-
-struct DbgContext {
- static const unsigned int LZF_CHUNK_SIZE = 256 * 1024;
-
-private:
- char * lzf_buf; // malloc / free; for lzf chunk compression and other uses
-
- // used as buffer and reference frame for ReadPixels; malloc/free
- unsigned * lzf_ref [2];
- unsigned lzf_readIndex; // 0 or 1
- unsigned lzf_refSize, lzf_refBufSize; // bytes
-
-public:
- const unsigned int version; // 0 is GLES1, 1 is GLES2
- const gl_hooks_t * const hooks;
- const unsigned int MAX_VERTEX_ATTRIBS;
- const unsigned int readBytesPerPixel;
-
- unsigned int captureSwap; // number of eglSwapBuffers to glReadPixels
- unsigned int captureDraw; // number of glDrawArrays/Elements to glReadPixels
-
- GLFunctionBitfield expectResponse;
-
- struct VertexAttrib {
- GLenum type; // element data type
- unsigned size; // number of data per element
- unsigned stride; // calculated number of bytes between elements
- const void * ptr;
- unsigned elemSize; // calculated number of bytes per element
- GLuint buffer; // buffer name
- GLboolean normalized : 1;
- GLboolean enabled : 1;
- VertexAttrib() : type(0), size(0), stride(0), ptr(NULL), elemSize(0),
- buffer(0), normalized(0), enabled(0) {}
- } * vertexAttribs;
- bool hasNonVBOAttribs; // whether any enabled vertexAttrib is user pointer
-
- struct VBO {
- const GLuint name;
- const GLenum target;
- VBO * next;
- void * data; // malloc/free
- unsigned size; // in bytes
- VBO(const GLuint name, const GLenum target, VBO * head) : name(name),
- target(target), next(head), data(NULL), size(0) {}
- } * indexBuffers; // linked list of all index buffers
- VBO * indexBuffer; // currently bound index buffer
-
- GLuint program;
- unsigned maxAttrib; // number of slots used by program
-
- DbgContext(const unsigned version, const gl_hooks_t * const hooks,
- const unsigned MAX_VERTEX_ATTRIBS);
- ~DbgContext();
-
- void Fetch(const unsigned index, std::string * const data) const;
- void Compress(const void * in_data, unsigned in_len, std::string * const outStr);
- static unsigned char * Decompress(const void * in, const unsigned int inLen,
- unsigned int * const outLen); // malloc/free
- void * GetReadPixelsBuffer(const unsigned size);
- bool IsReadPixelBuffer(const void * const ptr) {
- return ptr == lzf_ref[lzf_readIndex];
- }
- void CompressReadPixelBuffer(std::string * const outStr);
- char * GetBuffer(); // allocates lzf_buf if NULL
- unsigned int GetBufferSize(); // allocates lzf_buf if NULL
-
- void glUseProgram(GLuint program);
- void glEnableVertexAttribArray(GLuint index);
- void glDisableVertexAttribArray(GLuint index);
- void glVertexAttribPointer(GLuint indx, GLint size, GLenum type,
- GLboolean normalized, GLsizei stride, const GLvoid* ptr);
- void glBindBuffer(GLenum target, GLuint buffer);
- void glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
- void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
- void glDeleteBuffers(GLsizei n, const GLuint *buffers);
-};
-
-DbgContext * getDbgContextThreadSpecific();
-
-struct FunctionCall {
- virtual const int * operator()(gl_hooks_t::gl_t const * const _c,
- glesv2debugger::Message & msg) = 0;
- virtual ~FunctionCall() {}
-};
-
-// move these into DbgContext as static
-extern int timeMode; // SYSTEM_TIME_
-
-extern int clientSock, serverSock;
-
-unsigned GetBytesPerPixel(const GLenum format, const GLenum type);
-
-// every Debug_gl* function calls this to send message to client and possibly receive commands
-int * MessageLoop(FunctionCall & functionCall, glesv2debugger::Message & msg,
- const glesv2debugger::Message_Function function);
-
-void Receive(glesv2debugger::Message & cmd);
-float Send(const glesv2debugger::Message & msg, glesv2debugger::Message & cmd);
-void SetProp(DbgContext * const dbg, const glesv2debugger::Message & cmd);
-const int * GenerateCall(DbgContext * const dbg, const glesv2debugger::Message & cmd,
- glesv2debugger::Message & msg, const int * const prevRet);
-}; // namespace android {
-
-#endif // #ifndef ANDROID_GLES2_DBG_HEADER_H
diff --git a/opengl/libs/GLES2_dbg/src/server.cpp b/opengl/libs/GLES2_dbg/src/server.cpp
deleted file mode 100644
index 3e93697..0000000
--- a/opengl/libs/GLES2_dbg/src/server.cpp
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <fcntl.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <pthread.h>
-
-#include "header.h"
-
-namespace android
-{
-
-int serverSock = -1, clientSock = -1;
-FILE * file = NULL;
-unsigned int MAX_FILE_SIZE = 0;
-int timeMode = SYSTEM_TIME_THREAD;
-
-static void Die(const char * msg)
-{
- ALOGD("\n*\n*\n* GLESv2_dbg: Die: %s \n*\n*", msg);
- StopDebugServer();
- exit(1);
-}
-
-void StartDebugServer(const unsigned short port, const bool forceUseFile,
- const unsigned int maxFileSize, const char * const filePath)
-{
- MAX_FILE_SIZE = maxFileSize;
-
- ALOGD("GLESv2_dbg: StartDebugServer");
- if (serverSock >= 0 || file)
- return;
-
- ALOGD("GLESv2_dbg: StartDebugServer create socket");
- struct sockaddr_in server = {}, client = {};
-
- /* Create the TCP socket */
- if (forceUseFile || (serverSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
- file = fopen(filePath, "wb");
- if (!file)
- Die("Failed to create socket and file");
- else
- return;
- }
- /* Construct the server sockaddr_in structure */
- server.sin_family = AF_INET; /* Internet/IP */
- server.sin_addr.s_addr = htonl(INADDR_LOOPBACK); /* Incoming addr */
- server.sin_port = htons(port); /* server port */
-
- /* Bind the server socket */
- socklen_t sizeofSockaddr_in = sizeof(sockaddr_in);
- if (bind(serverSock, (struct sockaddr *) &server,
- sizeof(server)) < 0) {
- Die("Failed to bind the server socket");
- }
- /* Listen on the server socket */
- if (listen(serverSock, 1) < 0) {
- Die("Failed to listen on server socket");
- }
-
- ALOGD("server started on %d \n", server.sin_port);
-
-
- /* Wait for client connection */
- if ((clientSock =
- accept(serverSock, (struct sockaddr *) &client,
- &sizeofSockaddr_in)) < 0) {
- Die("Failed to accept client connection");
- }
-
- ALOGD("Client connected: %s\n", inet_ntoa(client.sin_addr));
-// fcntl(clientSock, F_SETFL, O_NONBLOCK);
-}
-
-void StopDebugServer()
-{
- ALOGD("GLESv2_dbg: StopDebugServer");
- if (clientSock > 0) {
- close(clientSock);
- clientSock = -1;
- }
- if (serverSock > 0) {
- close(serverSock);
- serverSock = -1;
- }
- if (file) {
- fclose(file);
- file = NULL;
- }
-}
-
-void Receive(glesv2debugger::Message & cmd)
-{
- if (clientSock < 0)
- return;
- unsigned len = 0;
- int received = recv(clientSock, &len, 4, MSG_WAITALL);
- if (received < 0)
- Die("Failed to receive response length");
- else if (4 != received) {
- ALOGD("received %dB: %.8X", received, len);
- Die("Received length mismatch, expected 4");
- }
- static void * buffer = NULL;
- static unsigned bufferSize = 0;
- if (bufferSize < len) {
- buffer = realloc(buffer, len);
- assert(buffer);
- bufferSize = len;
- }
- received = recv(clientSock, buffer, len, MSG_WAITALL);
- if (received < 0)
- Die("Failed to receive response");
- else if (len != received)
- Die("Received length mismatch");
- cmd.Clear();
- cmd.ParseFromArray(buffer, len);
-}
-
-bool TryReceive(glesv2debugger::Message & cmd)
-{
- if (clientSock < 0)
- return false;
- fd_set readSet;
- FD_ZERO(&readSet);
- FD_SET(clientSock, &readSet);
- timeval timeout;
- timeout.tv_sec = timeout.tv_usec = 0;
-
- int rc = select(clientSock + 1, &readSet, NULL, NULL, &timeout);
- if (rc < 0)
- Die("failed to select clientSock");
-
- bool received = false;
- if (FD_ISSET(clientSock, &readSet)) {
- ALOGD("TryReceive: avaiable for read");
- Receive(cmd);
- return true;
- }
- return false;
-}
-
-float Send(const glesv2debugger::Message & msg, glesv2debugger::Message & cmd)
-{
- // TODO: use per DbgContext send/receive buffer and async socket
- // instead of mutex and blocking io; watch out for large messages
- static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
- struct Autolock {
- Autolock() {
- pthread_mutex_lock(&mutex);
- }
- ~Autolock() {
- pthread_mutex_unlock(&mutex);
- }
- } autolock;
-
- if (msg.function() != glesv2debugger::Message_Function_ACK)
- assert(msg.has_context_id() && msg.context_id() != 0);
- static std::string str;
- msg.SerializeToString(&str);
- const uint32_t len = str.length();
- if (clientSock < 0) {
- if (file) {
- fwrite(&len, sizeof(len), 1, file);
- fwrite(str.data(), len, 1, file);
- if (ftell(file) >= MAX_FILE_SIZE) {
- fclose(file);
- Die("MAX_FILE_SIZE reached");
- }
- }
- return 0;
- }
- int sent = -1;
- sent = send(clientSock, &len, sizeof(len), 0);
- if (sent != sizeof(len)) {
- ALOGD("actual sent=%d expected=%d clientSock=%d", sent, sizeof(len), clientSock);
- Die("Failed to send message length");
- }
- nsecs_t c0 = systemTime(timeMode);
- sent = send(clientSock, str.data(), str.length(), 0);
- float t = (float)ns2ms(systemTime(timeMode) - c0);
- if (sent != str.length()) {
- ALOGD("actual sent=%d expected=%d clientSock=%d", sent, str.length(), clientSock);
- Die("Failed to send message");
- }
- // TODO: factor Receive & TryReceive out and into MessageLoop, or add control argument.
- // mean while, if server is sending a SETPROP then don't try to receive,
- // because server will not be processing received command
- if (msg.function() == msg.SETPROP)
- return t;
- // try to receive commands even though not expecting response,
- // since client can send SETPROP and other commands anytime
- if (!msg.expect_response()) {
- if (TryReceive(cmd)) {
- if (glesv2debugger::Message_Function_SETPROP == cmd.function())
- ALOGD("Send: TryReceived SETPROP");
- else
- ALOGD("Send: TryReceived %u", cmd.function());
- }
- } else
- Receive(cmd);
- return t;
-}
-
-void SetProp(DbgContext * const dbg, const glesv2debugger::Message & cmd)
-{
- switch (cmd.prop()) {
- case glesv2debugger::Message_Prop_CaptureDraw:
- ALOGD("SetProp Message_Prop_CaptureDraw %d", cmd.arg0());
- dbg->captureDraw = cmd.arg0();
- break;
- case glesv2debugger::Message_Prop_TimeMode:
- ALOGD("SetProp Message_Prop_TimeMode %d", cmd.arg0());
- timeMode = cmd.arg0();
- break;
- case glesv2debugger::Message_Prop_ExpectResponse:
- ALOGD("SetProp Message_Prop_ExpectResponse %d=%d", cmd.arg0(), cmd.arg1());
- dbg->expectResponse.Bit((glesv2debugger::Message_Function)cmd.arg0(), cmd.arg1());
- break;
- case glesv2debugger::Message_Prop_CaptureSwap:
- ALOGD("SetProp CaptureSwap %d", cmd.arg0());
- dbg->captureSwap = cmd.arg0();
- break;
- default:
- assert(0);
- }
-}
-
-int * MessageLoop(FunctionCall & functionCall, glesv2debugger::Message & msg,
- const glesv2debugger::Message_Function function)
-{
- DbgContext * const dbg = getDbgContextThreadSpecific();
- const int * ret = 0;
- glesv2debugger::Message cmd;
- msg.set_context_id(reinterpret_cast<int>(dbg));
- msg.set_type(glesv2debugger::Message_Type_BeforeCall);
- bool expectResponse = dbg->expectResponse.Bit(function);
- msg.set_expect_response(expectResponse);
- msg.set_function(function);
-
- // when not exectResponse, set cmd to CONTINUE then SKIP
- // cmd will be overwritten by received command
- cmd.set_function(glesv2debugger::Message_Function_CONTINUE);
- cmd.set_expect_response(expectResponse);
- glesv2debugger::Message_Function oldCmd = cmd.function();
- Send(msg, cmd);
- expectResponse = cmd.expect_response();
- while (true) {
- msg.Clear();
- nsecs_t c0 = systemTime(timeMode);
- switch (cmd.function()) {
- case glesv2debugger::Message_Function_CONTINUE:
- ret = functionCall(&dbg->hooks->gl, msg);
- while (GLenum error = dbg->hooks->gl.glGetError())
- ALOGD("Function=%u glGetError() = 0x%.4X", function, error);
- if (!msg.has_time()) // some has output data copy, so time inside call
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.set_context_id(reinterpret_cast<int>(dbg));
- msg.set_function(function);
- msg.set_type(glesv2debugger::Message_Type_AfterCall);
- msg.set_expect_response(expectResponse);
- if (!expectResponse) {
- cmd.set_function(glesv2debugger::Message_Function_SKIP);
- cmd.set_expect_response(false);
- }
- oldCmd = cmd.function();
- Send(msg, cmd);
- expectResponse = cmd.expect_response();
- break;
- case glesv2debugger::Message_Function_SKIP:
- return const_cast<int *>(ret);
- case glesv2debugger::Message_Function_SETPROP:
- SetProp(dbg, cmd);
- expectResponse = cmd.expect_response();
- if (!expectResponse) // SETPROP is "out of band"
- cmd.set_function(oldCmd);
- else
- Receive(cmd);
- break;
- default:
- ret = GenerateCall(dbg, cmd, msg, ret);
- msg.set_expect_response(expectResponse);
- if (!expectResponse) {
- cmd.set_function(cmd.SKIP);
- cmd.set_expect_response(expectResponse);
- }
- oldCmd = cmd.function();
- Send(msg, cmd);
- expectResponse = cmd.expect_response();
- break;
- }
- }
- return 0;
-}
-}; // namespace android {
diff --git a/opengl/libs/GLES2_dbg/src/vertex.cpp b/opengl/libs/GLES2_dbg/src/vertex.cpp
deleted file mode 100644
index 70c3433..0000000
--- a/opengl/libs/GLES2_dbg/src/vertex.cpp
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-#include "header.h"
-
-namespace android
-{
-bool capture; // capture after each glDraw*
-}
-
-void Debug_glDrawArrays(GLenum mode, GLint first, GLsizei count)
-{
- DbgContext * const dbg = getDbgContextThreadSpecific();
- glesv2debugger::Message msg, cmd;
- msg.set_context_id(reinterpret_cast<int>(dbg));
- msg.set_type(glesv2debugger::Message_Type_BeforeCall);
- bool expectResponse = dbg->expectResponse.Bit(glesv2debugger::Message_Function_glDrawArrays);
- msg.set_expect_response(expectResponse);
- msg.set_function(glesv2debugger::Message_Function_glDrawArrays);
- msg.set_arg0(mode);
- msg.set_arg1(first);
- msg.set_arg2(count);
-
- msg.set_arg7(dbg->maxAttrib); // indicate capturing vertex data
- if (dbg->hasNonVBOAttribs) {
- std::string * const data = msg.mutable_data();
- for (unsigned i = 0; i < count; i++)
- dbg->Fetch(i + first, data);
- }
-
- void * pixels = NULL;
- int viewport[4] = {};
- cmd.set_function(glesv2debugger::Message_Function_CONTINUE);
- cmd.set_expect_response(expectResponse);
- glesv2debugger::Message_Function oldCmd = cmd.function();
- Send(msg, cmd);
- expectResponse = cmd.expect_response();
- while (true) {
- msg.Clear();
- nsecs_t c0 = systemTime(timeMode);
- switch (cmd.function()) {
- case glesv2debugger::Message_Function_CONTINUE:
- dbg->hooks->gl.glDrawArrays(mode, first, count);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.set_context_id(reinterpret_cast<int>(dbg));
- msg.set_function(glesv2debugger::Message_Function_glDrawArrays);
- msg.set_type(glesv2debugger::Message_Type_AfterCall);
- msg.set_expect_response(expectResponse);
- if (!expectResponse) {
- cmd.set_function(glesv2debugger::Message_Function_SKIP);
- cmd.set_expect_response(false);
- }
- oldCmd = cmd.function();
- Send(msg, cmd);
- expectResponse = cmd.expect_response();
- // TODO: pack glReadPixels data with vertex data instead of
- // relying on sperate call for transport, this would allow
- // auto generated message loop using EXTEND_Debug macro
- if (dbg->captureDraw > 0) {
- dbg->captureDraw--;
- dbg->hooks->gl.glGetIntegerv(GL_VIEWPORT, viewport);
-// ALOGD("glDrawArrays CAPTURE: x=%d y=%d width=%d height=%d format=0x%.4X type=0x%.4X",
-// viewport[0], viewport[1], viewport[2], viewport[3], readFormat, readType);
- pixels = dbg->GetReadPixelsBuffer(viewport[2] * viewport[3] *
- dbg->readBytesPerPixel);
- Debug_glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3],
- GL_RGBA, GL_UNSIGNED_BYTE, pixels);
- }
- break;
- case glesv2debugger::Message_Function_SKIP:
- return;
- case glesv2debugger::Message_Function_SETPROP:
- SetProp(dbg, cmd);
- expectResponse = cmd.expect_response();
- if (!expectResponse) // SETPROP is "out of band"
- cmd.set_function(oldCmd);
- else
- Receive(cmd);
- break;
- default:
- GenerateCall(dbg, cmd, msg, NULL);
- msg.set_expect_response(expectResponse);
- if (!expectResponse) {
- cmd.set_function(cmd.SKIP);
- cmd.set_expect_response(expectResponse);
- }
- oldCmd = cmd.function();
- Send(msg, cmd);
- expectResponse = cmd.expect_response();
- break;
- }
- }
-}
-
-template<typename T>
-static inline void FetchIndexed(const unsigned count, const T * indices,
- std::string * const data, const DbgContext * const ctx)
-{
- for (unsigned i = 0; i < count; i++) {
- if (!ctx->indexBuffer)
- data->append((const char *)(indices + i), sizeof(*indices));
- if (ctx->hasNonVBOAttribs)
- ctx->Fetch(indices[i], data);
- }
-}
-
-void Debug_glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
-{
- DbgContext * const dbg = getDbgContextThreadSpecific();
- glesv2debugger::Message msg, cmd;
- msg.set_context_id(reinterpret_cast<int>(dbg));
- msg.set_type(glesv2debugger::Message_Type_BeforeCall);
- bool expectResponse = dbg->expectResponse.Bit(glesv2debugger::Message_Function_glDrawElements);
- msg.set_expect_response(expectResponse);
- msg.set_function(glesv2debugger::Message_Function_glDrawElements);
- msg.set_arg0(mode);
- msg.set_arg1(count);
- msg.set_arg2(type);
- msg.set_arg3(reinterpret_cast<int>(indices));
-
- msg.set_arg7(dbg->maxAttrib); // indicate capturing vertex data
- std::string * const data = msg.mutable_data();
- if (GL_UNSIGNED_BYTE == type) {
- if (dbg->indexBuffer) {
- FetchIndexed(count, (unsigned char *)dbg->indexBuffer->data +
- (unsigned long)indices, data, dbg);
- } else {
- FetchIndexed(count, (unsigned char *)indices, data, dbg);
- }
- } else if (GL_UNSIGNED_SHORT == type) {
- if (dbg->indexBuffer) {
- FetchIndexed(count, (unsigned short *)((char *)dbg->indexBuffer->data +
- (unsigned long)indices), data, dbg);
- } else {
- FetchIndexed(count, (unsigned short *)indices, data, dbg);
- }
- } else {
- assert(0);
- }
-
- void * pixels = NULL;
- int viewport[4] = {};
- cmd.set_function(glesv2debugger::Message_Function_CONTINUE);
- cmd.set_expect_response(expectResponse);
- glesv2debugger::Message_Function oldCmd = cmd.function();
- Send(msg, cmd);
- expectResponse = cmd.expect_response();
- while (true) {
- msg.Clear();
- nsecs_t c0 = systemTime(timeMode);
- switch (cmd.function()) {
- case glesv2debugger::Message_Function_CONTINUE:
- dbg->hooks->gl.glDrawElements(mode, count, type, indices);
- msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
- msg.set_context_id(reinterpret_cast<int>(dbg));
- msg.set_function(glesv2debugger::Message_Function_glDrawElements);
- msg.set_type(glesv2debugger::Message_Type_AfterCall);
- msg.set_expect_response(expectResponse);
- if (!expectResponse) {
- cmd.set_function(glesv2debugger::Message_Function_SKIP);
- cmd.set_expect_response(false);
- }
- oldCmd = cmd.function();
- Send(msg, cmd);
- expectResponse = cmd.expect_response();
- // TODO: pack glReadPixels data with vertex data instead of
- // relying on separate call for transport, this would allow
- // auto generated message loop using EXTEND_Debug macro
- if (dbg->captureDraw > 0) {
- dbg->captureDraw--;
- dbg->hooks->gl.glGetIntegerv(GL_VIEWPORT, viewport);
- pixels = dbg->GetReadPixelsBuffer(viewport[2] * viewport[3] *
- dbg->readBytesPerPixel);
- Debug_glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3],
- GL_RGBA, GL_UNSIGNED_BYTE, pixels);
- }
- break;
- case glesv2debugger::Message_Function_SKIP:
- return;
- case glesv2debugger::Message_Function_SETPROP:
- SetProp(dbg, cmd);
- expectResponse = cmd.expect_response();
- if (!expectResponse) // SETPROP is "out of band"
- cmd.set_function(oldCmd);
- else
- Receive(cmd);
- break;
- default:
- GenerateCall(dbg, cmd, msg, NULL);
- msg.set_expect_response(expectResponse);
- if (!expectResponse) {
- cmd.set_function(cmd.SKIP);
- cmd.set_expect_response(expectResponse);
- }
- oldCmd = cmd.function();
- Send(msg, cmd);
- expectResponse = cmd.expect_response();
- break;
- }
- }
-}
diff --git a/opengl/libs/GLES2_dbg/test/Android.mk b/opengl/libs/GLES2_dbg/test/Android.mk
deleted file mode 100644
index 8708d43..0000000
--- a/opengl/libs/GLES2_dbg/test/Android.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH) \
- $(LOCAL_PATH)/../src \
- $(LOCAL_PATH)/../../ \
- external/gtest/include \
- external/stlport/stlport \
- external/protobuf/src \
- bionic \
- external \
-#
-
-LOCAL_SRC_FILES:= \
- test_main.cpp \
- test_server.cpp \
- test_socket.cpp \
-#
-
-LOCAL_SHARED_LIBRARIES := libcutils libutils libGLESv2_dbg libstlport
-LOCAL_STATIC_LIBRARIES := libgtest libprotobuf-cpp-2.3.0-lite liblzf
-LOCAL_MODULE_TAGS := tests
-LOCAL_MODULE:= libGLESv2_dbg_test
-
-ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true)
- LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
-endif
-LOCAL_C_INCLUDES += bionic/libc/private
-
-LOCAL_CFLAGS += -DLOG_TAG=\"libEGL\"
-LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES
-LOCAL_CFLAGS += -fvisibility=hidden
-
-include $(BUILD_EXECUTABLE)
-
diff --git a/opengl/libs/GLES2_dbg/test/test_main.cpp b/opengl/libs/GLES2_dbg/test/test_main.cpp
deleted file mode 100644
index 183bf8e..0000000
--- a/opengl/libs/GLES2_dbg/test/test_main.cpp
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-#include "header.h"
-#include "gtest/gtest.h"
-#include "hooks.h"
-
-namespace
-{
-
-// The fixture for testing class Foo.
-class DbgContextTest : public ::testing::Test
-{
-protected:
- android::DbgContext dbg;
- gl_hooks_t hooks;
-
- DbgContextTest()
- : dbg(1, &hooks, 32) {
- // You can do set-up work for each test here.
- hooks.gl.glGetError = GetError;
- }
-
- static GLenum GetError() {
- return GL_NO_ERROR;
- }
-
- virtual ~DbgContextTest() {
- // You can do clean-up work that doesn't throw exceptions here.
- }
-
- // If the constructor and destructor are not enough for setting up
- // and cleaning up each test, you can define the following methods:
-
- virtual void SetUp() {
- // Code here will be called immediately after the constructor (right
- // before each test).
- }
-
- virtual void TearDown() {
- // Code here will be called immediately after each test (right
- // before the destructor).
- }
-};
-
-TEST_F(DbgContextTest, GetReadPixelBuffer)
-{
- const unsigned int bufferSize = 512;
- // test that it's allocating two buffers and swapping them
- void * const buffer0 = dbg.GetReadPixelsBuffer(bufferSize);
- ASSERT_NE((void *)NULL, buffer0);
- for (unsigned int i = 0; i < bufferSize / sizeof(unsigned int); i++) {
- EXPECT_EQ(0, ((unsigned int *)buffer0)[i])
- << "GetReadPixelsBuffer should allocate and zero";
- ((unsigned int *)buffer0)[i] = i * 13;
- }
-
- void * const buffer1 = dbg.GetReadPixelsBuffer(bufferSize);
- ASSERT_NE((void *)NULL, buffer1);
- EXPECT_NE(buffer0, buffer1);
- for (unsigned int i = 0; i < bufferSize / sizeof(unsigned int); i++) {
- EXPECT_EQ(0, ((unsigned int *)buffer1)[i])
- << "GetReadPixelsBuffer should allocate and zero";
- ((unsigned int *)buffer1)[i] = i * 17;
- }
-
- void * const buffer2 = dbg.GetReadPixelsBuffer(bufferSize);
- EXPECT_EQ(buffer2, buffer0);
- for (unsigned int i = 0; i < bufferSize / sizeof(unsigned int); i++)
- EXPECT_EQ(i * 13, ((unsigned int *)buffer2)[i])
- << "GetReadPixelsBuffer should swap buffers";
-
- void * const buffer3 = dbg.GetReadPixelsBuffer(bufferSize);
- EXPECT_EQ(buffer3, buffer1);
- for (unsigned int i = 0; i < bufferSize / sizeof(unsigned int); i++)
- EXPECT_EQ(i * 17, ((unsigned int *)buffer3)[i])
- << "GetReadPixelsBuffer should swap buffers";
-
- void * const buffer4 = dbg.GetReadPixelsBuffer(bufferSize);
- EXPECT_NE(buffer3, buffer4);
- EXPECT_EQ(buffer0, buffer2);
- EXPECT_EQ(buffer1, buffer3);
- EXPECT_EQ(buffer2, buffer4);
-
- // it reallocs as necessary; 0 size may result in NULL
- for (unsigned int i = 0; i < 42; i++) {
- void * const buffer = dbg.GetReadPixelsBuffer(((i & 7)) << 20);
- EXPECT_NE((void *)NULL, buffer)
- << "should be able to get a variety of reasonable sizes";
- EXPECT_TRUE(dbg.IsReadPixelBuffer(buffer));
- }
-}
-
-TEST_F(DbgContextTest, CompressReadPixelBuffer)
-{
- const unsigned int bufferSize = dbg.LZF_CHUNK_SIZE * 4 + 33;
- std::string out;
- unsigned char * buffer = (unsigned char *)dbg.GetReadPixelsBuffer(bufferSize);
- for (unsigned int i = 0; i < bufferSize; i++)
- buffer[i] = i * 13;
- dbg.CompressReadPixelBuffer(&out);
- uint32_t decompSize = 0;
- ASSERT_LT(12, out.length()); // at least written chunk header
- ASSERT_EQ(bufferSize, *(uint32_t *)out.data())
- << "total decompressed size should be as requested in GetReadPixelsBuffer";
- for (unsigned int i = 4; i < out.length();) {
- const uint32_t outSize = *(uint32_t *)(out.data() + i);
- i += 4;
- const uint32_t inSize = *(uint32_t *)(out.data() + i);
- i += 4;
- if (inSize == 0)
- i += outSize; // chunk not compressed
- else
- i += inSize; // skip the actual compressed chunk
- decompSize += outSize;
- }
- ASSERT_EQ(bufferSize, decompSize);
- decompSize = 0;
-
- unsigned char * decomp = dbg.Decompress(out.data(), out.length(), &decompSize);
- ASSERT_EQ(decompSize, bufferSize);
- for (unsigned int i = 0; i < bufferSize; i++)
- EXPECT_EQ((unsigned char)(i * 13), decomp[i]) << "xor with 0 ref is identity";
- free(decomp);
-
- buffer = (unsigned char *)dbg.GetReadPixelsBuffer(bufferSize);
- for (unsigned int i = 0; i < bufferSize; i++)
- buffer[i] = i * 13;
- out.clear();
- dbg.CompressReadPixelBuffer(&out);
- decompSize = 0;
- decomp = dbg.Decompress(out.data(), out.length(), &decompSize);
- ASSERT_EQ(decompSize, bufferSize);
- for (unsigned int i = 0; i < bufferSize; i++)
- EXPECT_EQ(0, decomp[i]) << "xor with same ref is 0";
- free(decomp);
-
- buffer = (unsigned char *)dbg.GetReadPixelsBuffer(bufferSize);
- for (unsigned int i = 0; i < bufferSize; i++)
- buffer[i] = i * 19;
- out.clear();
- dbg.CompressReadPixelBuffer(&out);
- decompSize = 0;
- decomp = dbg.Decompress(out.data(), out.length(), &decompSize);
- ASSERT_EQ(decompSize, bufferSize);
- for (unsigned int i = 0; i < bufferSize; i++)
- EXPECT_EQ((unsigned char)(i * 13) ^ (unsigned char)(i * 19), decomp[i])
- << "xor ref";
- free(decomp);
-}
-
-TEST_F(DbgContextTest, UseProgram)
-{
- static const GLuint _program = 74568;
- static const struct Attribute {
- const char * name;
- GLint location;
- GLint size;
- GLenum type;
- } _attributes [] = {
- {"aaa", 2, 2, GL_FLOAT_VEC2},
- {"bb", 6, 2, GL_FLOAT_MAT2},
- {"c", 1, 1, GL_FLOAT},
- };
- static const unsigned int _attributeCount = sizeof(_attributes) / sizeof(*_attributes);
- struct GL {
- static void GetProgramiv(GLuint program, GLenum pname, GLint* params) {
- EXPECT_EQ(_program, program);
- ASSERT_NE((GLint *)NULL, params);
- switch (pname) {
- case GL_ACTIVE_ATTRIBUTES:
- *params = _attributeCount;
- return;
- case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
- *params = 4; // includes NULL terminator
- return;
- default:
- ADD_FAILURE() << "not handled pname: " << pname;
- }
- }
-
- static GLint GetAttribLocation(GLuint program, const GLchar* name) {
- EXPECT_EQ(_program, program);
- for (unsigned int i = 0; i < _attributeCount; i++)
- if (!strcmp(name, _attributes[i].name))
- return _attributes[i].location;
- ADD_FAILURE() << "unknown attribute name: " << name;
- return -1;
- }
-
- static void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize,
- GLsizei* length, GLint* size, GLenum* type, GLchar* name) {
- EXPECT_EQ(_program, program);
- ASSERT_LT(index, _attributeCount);
- const Attribute & att = _attributes[index];
- ASSERT_GE(bufsize, strlen(att.name) + 1);
- ASSERT_NE((GLint *)NULL, size);
- ASSERT_NE((GLenum *)NULL, type);
- ASSERT_NE((GLchar *)NULL, name);
- strcpy(name, att.name);
- if (length)
- *length = strlen(name) + 1;
- *size = att.size;
- *type = att.type;
- }
- };
- hooks.gl.glGetProgramiv = GL::GetProgramiv;
- hooks.gl.glGetAttribLocation = GL::GetAttribLocation;
- hooks.gl.glGetActiveAttrib = GL::GetActiveAttrib;
- dbg.glUseProgram(_program);
- EXPECT_EQ(10, dbg.maxAttrib);
- dbg.glUseProgram(0);
- EXPECT_EQ(0, dbg.maxAttrib);
-}
-} // namespace
-
-int main(int argc, char **argv)
-{
- ::testing::InitGoogleTest(&argc, argv);
- return RUN_ALL_TESTS();
-}
diff --git a/opengl/libs/GLES2_dbg/test/test_server.cpp b/opengl/libs/GLES2_dbg/test/test_server.cpp
deleted file mode 100644
index 0ab87b0..0000000
--- a/opengl/libs/GLES2_dbg/test/test_server.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-#include "header.h"
-#include "gtest/gtest.h"
-#include "hooks.h"
-
-namespace android
-{
-extern FILE * file;
-extern unsigned int MAX_FILE_SIZE;
-};
-
-// tmpfile fails, so need to manually make a writable file first
-static const char * filePath = "/data/local/tmp/dump.gles2dbg";
-
-class ServerFileTest : public ::testing::Test
-{
-protected:
- ServerFileTest() { }
-
- virtual ~ServerFileTest() { }
-
- virtual void SetUp() {
- MAX_FILE_SIZE = 8 << 20;
- ASSERT_EQ((FILE *)NULL, file);
- file = fopen("/data/local/tmp/dump.gles2dbg", "wb+");
- ASSERT_NE((FILE *)NULL, file) << "make sure file is writable: "
- << filePath;
- }
-
- virtual void TearDown() {
- ASSERT_NE((FILE *)NULL, file);
- fclose(file);
- file = NULL;
- }
-
- void Read(glesv2debugger::Message & msg) const {
- msg.Clear();
- uint32_t len = 0;
- ASSERT_EQ(sizeof(len), fread(&len, 1, sizeof(len), file));
- ASSERT_GT(len, 0u);
- char * buffer = new char [len];
- ASSERT_EQ(len, fread(buffer, 1, len, file));
- msg.ParseFromArray(buffer, len);
- delete buffer;
- }
-
- void CheckNoAvailable() {
- const long pos = ftell(file);
- fseek(file, 0, SEEK_END);
- EXPECT_EQ(pos, ftell(file)) << "check no available";
- }
-};
-
-TEST_F(ServerFileTest, Send)
-{
- glesv2debugger::Message msg, cmd, read;
- msg.set_context_id(1);
- msg.set_function(msg.glFinish);
- msg.set_expect_response(false);
- msg.set_type(msg.BeforeCall);
- rewind(file);
- android::Send(msg, cmd);
- rewind(file);
- Read(read);
- EXPECT_EQ(msg.context_id(), read.context_id());
- EXPECT_EQ(msg.function(), read.function());
- EXPECT_EQ(msg.expect_response(), read.expect_response());
- EXPECT_EQ(msg.type(), read.type());
-}
-
-TEST_F(ServerFileTest, CreateDbgContext)
-{
- gl_hooks_t hooks;
- struct Constant {
- GLenum pname;
- GLint param;
- };
- static const Constant constants [] = {
- {GL_MAX_VERTEX_ATTRIBS, 16},
- {GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, 32},
- {GL_IMPLEMENTATION_COLOR_READ_FORMAT, GL_RGBA},
- {GL_IMPLEMENTATION_COLOR_READ_TYPE, GL_UNSIGNED_BYTE},
- };
- struct HookMock {
- static void GetIntegerv(GLenum pname, GLint* params) {
- ASSERT_TRUE(params != NULL);
- for (unsigned int i = 0; i < sizeof(constants) / sizeof(*constants); i++)
- if (pname == constants[i].pname) {
- *params = constants[i].param;
- return;
- }
- FAIL() << "GetIntegerv unknown pname: " << pname;
- }
- static GLenum GetError() {
- return GL_NO_ERROR;
- }
- };
- hooks.gl.glGetError = HookMock::GetError;
- hooks.gl.glGetIntegerv = HookMock::GetIntegerv;
- DbgContext * const dbg = CreateDbgContext(1, &hooks);
- ASSERT_TRUE(dbg != NULL);
- EXPECT_TRUE(dbg->vertexAttribs != NULL);
-
- rewind(file);
- glesv2debugger::Message read;
- for (unsigned int i = 0; i < 2; i++) {
- Read(read);
- EXPECT_EQ(reinterpret_cast<int>(dbg), read.context_id());
- EXPECT_FALSE(read.expect_response());
- EXPECT_EQ(read.Response, read.type());
- EXPECT_EQ(read.SETPROP, read.function());
- EXPECT_EQ(read.GLConstant, read.prop());
- GLint expectedConstant = 0;
- HookMock::GetIntegerv(read.arg0(), &expectedConstant);
- EXPECT_EQ(expectedConstant, read.arg1());
- }
- CheckNoAvailable();
- dbgReleaseThread();
-}
-
-void * glNoop()
-{
- return 0;
-}
-
-class ServerFileContextTest : public ServerFileTest
-{
-protected:
- DbgContext* dbg;
- gl_hooks_t hooks;
-
- ServerFileContextTest() { }
-
- virtual ~ServerFileContextTest() { }
-
- virtual void SetUp() {
- ServerFileTest::SetUp();
-
- dbg = new DbgContext(1, &hooks, 32);
- ASSERT_NE((void *)NULL, dbg);
- for (unsigned int i = 0; i < sizeof(hooks) / sizeof(void *); i++)
- ((void **)&hooks)[i] = reinterpret_cast<void *>(glNoop);
- }
-
- virtual void TearDown() {
- ServerFileTest::TearDown();
- }
-};
-
-TEST_F(ServerFileContextTest, MessageLoop)
-{
- static const int arg0 = 45;
- static const float arg7 = -87.2331f;
- static const int arg8 = -3;
- static const int * ret = reinterpret_cast<int *>(870);
-
- struct Caller : public FunctionCall {
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- msg.set_arg0(arg0);
- msg.set_arg7((int &)arg7);
- msg.set_arg8(arg8);
- return ret;
- }
- } caller;
- const int contextId = reinterpret_cast<int>(dbg);
- glesv2debugger::Message msg, read;
-
- EXPECT_EQ(ret, MessageLoop(caller, msg, msg.glFinish));
-
- rewind(file);
- Read(read);
- EXPECT_EQ(contextId, read.context_id());
- EXPECT_EQ(read.glFinish, read.function());
- EXPECT_EQ(false, read.expect_response());
- EXPECT_EQ(read.BeforeCall, read.type());
-
- Read(read);
- EXPECT_EQ(contextId, read.context_id());
- EXPECT_EQ(read.glFinish, read.function());
- EXPECT_EQ(false, read.expect_response());
- EXPECT_EQ(read.AfterCall, read.type());
- EXPECT_TRUE(read.has_time());
- EXPECT_EQ(arg0, read.arg0());
- const int readArg7 = read.arg7();
- EXPECT_EQ(arg7, (float &)readArg7);
- EXPECT_EQ(arg8, read.arg8());
-
- const long pos = ftell(file);
- fseek(file, 0, SEEK_END);
- EXPECT_EQ(pos, ftell(file))
- << "should only write the BeforeCall and AfterCall messages";
-}
-
-TEST_F(ServerFileContextTest, DisableEnableVertexAttribArray)
-{
- Debug_glEnableVertexAttribArray(dbg->MAX_VERTEX_ATTRIBS + 2); // should just ignore invalid index
-
- glesv2debugger::Message read;
- rewind(file);
- Read(read);
- EXPECT_EQ(read.glEnableVertexAttribArray, read.function());
- EXPECT_EQ(dbg->MAX_VERTEX_ATTRIBS + 2, read.arg0());
- Read(read);
-
- rewind(file);
- Debug_glDisableVertexAttribArray(dbg->MAX_VERTEX_ATTRIBS + 4); // should just ignore invalid index
- rewind(file);
- Read(read);
- Read(read);
-
- for (unsigned int i = 0; i < dbg->MAX_VERTEX_ATTRIBS; i += 5) {
- rewind(file);
- Debug_glEnableVertexAttribArray(i);
- EXPECT_TRUE(dbg->vertexAttribs[i].enabled);
- rewind(file);
- Read(read);
- EXPECT_EQ(read.glEnableVertexAttribArray, read.function());
- EXPECT_EQ(i, read.arg0());
- Read(read);
-
- rewind(file);
- Debug_glDisableVertexAttribArray(i);
- EXPECT_FALSE(dbg->vertexAttribs[i].enabled);
- rewind(file);
- Read(read);
- EXPECT_EQ(read.glDisableVertexAttribArray, read.function());
- EXPECT_EQ(i, read.arg0());
- Read(read);
- }
-}
diff --git a/opengl/libs/GLES2_dbg/test/test_socket.cpp b/opengl/libs/GLES2_dbg/test/test_socket.cpp
deleted file mode 100644
index 9f815e2..0000000
--- a/opengl/libs/GLES2_dbg/test/test_socket.cpp
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- ** Copyright 2011, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-
-#include "header.h"
-#include "gtest/gtest.h"
-#include "hooks.h"
-
-namespace android
-{
-extern int serverSock, clientSock;
-};
-
-void * glNoop();
-
-class SocketContextTest : public ::testing::Test
-{
-protected:
- DbgContext* dbg;
- gl_hooks_t hooks;
- int sock;
- char * buffer;
- unsigned int bufferSize;
-
- SocketContextTest() : sock(-1) {
- }
-
- virtual ~SocketContextTest() {
- }
-
- virtual void SetUp() {
- dbg = new DbgContext(1, &hooks, 32);
- ASSERT_TRUE(dbg != NULL);
- for (unsigned int i = 0; i < sizeof(hooks) / sizeof(void *); i++)
- ((void **)&hooks)[i] = (void *)glNoop;
-
- int socks[2] = {-1, -1};
- ASSERT_EQ(0, socketpair(AF_UNIX, SOCK_STREAM, 0, socks));
- clientSock = socks[0];
- sock = socks[1];
-
- bufferSize = 128;
- buffer = new char [128];
- ASSERT_NE((char *)NULL, buffer);
- }
-
- virtual void TearDown() {
- close(sock);
- close(clientSock);
- clientSock = -1;
- delete buffer;
- }
-
- void Write(glesv2debugger::Message & msg) const {
- msg.set_context_id((int)dbg);
- msg.set_type(msg.Response);
- ASSERT_TRUE(msg.has_context_id());
- ASSERT_TRUE(msg.has_function());
- ASSERT_TRUE(msg.has_type());
- ASSERT_TRUE(msg.has_expect_response());
- static std::string str;
- msg.SerializeToString(&str);
- const uint32_t len = str.length();
- ASSERT_EQ(sizeof(len), send(sock, &len, sizeof(len), 0));
- ASSERT_EQ(str.length(), send(sock, str.data(), str.length(), 0));
- }
-
- void Read(glesv2debugger::Message & msg) {
- int available = 0;
- ASSERT_EQ(0, ioctl(sock, FIONREAD, &available));
- ASSERT_GT(available, 0);
- uint32_t len = 0;
- ASSERT_EQ(sizeof(len), recv(sock, &len, sizeof(len), 0));
- if (len > bufferSize) {
- bufferSize = len;
- buffer = new char[bufferSize];
- ASSERT_TRUE(buffer != NULL);
- }
- ASSERT_EQ(len, recv(sock, buffer, len, 0));
- msg.Clear();
- msg.ParseFromArray(buffer, len);
- ASSERT_TRUE(msg.has_context_id());
- ASSERT_TRUE(msg.has_function());
- ASSERT_TRUE(msg.has_type());
- ASSERT_TRUE(msg.has_expect_response());
- }
-
- void CheckNoAvailable() {
- int available = 0;
- ASSERT_EQ(0, ioctl(sock, FIONREAD, &available));
- ASSERT_EQ(available, 0);
- }
-};
-
-TEST_F(SocketContextTest, MessageLoopSkip)
-{
- static const int arg0 = 45;
- static const float arg7 = -87.2331f;
- static const int arg8 = -3;
- static const int * ret = (int *)870;
-
- struct Caller : public FunctionCall {
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- msg.set_arg0(arg0);
- msg.set_arg7((int &)arg7);
- msg.set_arg8(arg8);
- return ret;
- }
- } caller;
- glesv2debugger::Message msg, read, cmd;
- dbg->expectResponse.Bit(msg.glFinish, true);
-
- cmd.set_function(cmd.SKIP);
- cmd.set_expect_response(false);
- Write(cmd);
-
- EXPECT_NE(ret, MessageLoop(caller, msg, msg.glFinish));
-
- Read(read);
- EXPECT_EQ(read.glFinish, read.function());
- EXPECT_EQ(read.BeforeCall, read.type());
- EXPECT_NE(arg0, read.arg0());
- EXPECT_NE((int &)arg7, read.arg7());
- EXPECT_NE(arg8, read.arg8());
-
- CheckNoAvailable();
-}
-
-TEST_F(SocketContextTest, MessageLoopContinue)
-{
- static const int arg0 = GL_FRAGMENT_SHADER;
- static const int ret = -342;
- struct Caller : public FunctionCall {
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- msg.set_ret(ret);
- return (int *)ret;
- }
- } caller;
- glesv2debugger::Message msg, read, cmd;
- dbg->expectResponse.Bit(msg.glCreateShader, true);
-
- cmd.set_function(cmd.CONTINUE);
- cmd.set_expect_response(false); // MessageLoop should automatically skip after continue
- Write(cmd);
-
- msg.set_arg0(arg0);
- EXPECT_EQ((int *)ret, MessageLoop(caller, msg, msg.glCreateShader));
-
- Read(read);
- EXPECT_EQ(read.glCreateShader, read.function());
- EXPECT_EQ(read.BeforeCall, read.type());
- EXPECT_EQ(arg0, read.arg0());
-
- Read(read);
- EXPECT_EQ(read.glCreateShader, read.function());
- EXPECT_EQ(read.AfterCall, read.type());
- EXPECT_EQ(ret, read.ret());
-
- CheckNoAvailable();
-}
-
-TEST_F(SocketContextTest, MessageLoopGenerateCall)
-{
- static const int ret = -342;
- static unsigned int createShader, createProgram;
- createShader = 0;
- createProgram = 0;
- struct Caller : public FunctionCall {
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int r = (int)_c->glCreateProgram();
- msg.set_ret(r);
- return (int *)r;
- }
- static GLuint CreateShader(const GLenum type) {
- createShader++;
- return type;
- }
- static GLuint CreateProgram() {
- createProgram++;
- return ret;
- }
- } caller;
- glesv2debugger::Message msg, read, cmd;
- hooks.gl.glCreateShader = caller.CreateShader;
- hooks.gl.glCreateProgram = caller.CreateProgram;
- dbg->expectResponse.Bit(msg.glCreateProgram, true);
-
- cmd.set_function(cmd.glCreateShader);
- cmd.set_arg0(GL_FRAGMENT_SHADER);
- cmd.set_expect_response(true);
- Write(cmd);
-
- cmd.Clear();
- cmd.set_function(cmd.CONTINUE);
- cmd.set_expect_response(true);
- Write(cmd);
-
- cmd.set_function(cmd.glCreateShader);
- cmd.set_arg0(GL_VERTEX_SHADER);
- cmd.set_expect_response(false); // MessageLoop should automatically skip afterwards
- Write(cmd);
-
- EXPECT_EQ((int *)ret, MessageLoop(caller, msg, msg.glCreateProgram));
-
- Read(read);
- EXPECT_EQ(read.glCreateProgram, read.function());
- EXPECT_EQ(read.BeforeCall, read.type());
-
- Read(read);
- EXPECT_EQ(read.glCreateShader, read.function());
- EXPECT_EQ(read.AfterGeneratedCall, read.type());
- EXPECT_EQ(GL_FRAGMENT_SHADER, read.ret());
-
- Read(read);
- EXPECT_EQ(read.glCreateProgram, read.function());
- EXPECT_EQ(read.AfterCall, read.type());
- EXPECT_EQ(ret, read.ret());
-
- Read(read);
- EXPECT_EQ(read.glCreateShader, read.function());
- EXPECT_EQ(read.AfterGeneratedCall, read.type());
- EXPECT_EQ(GL_VERTEX_SHADER, read.ret());
-
- EXPECT_EQ(2, createShader);
- EXPECT_EQ(1, createProgram);
-
- CheckNoAvailable();
-}
-
-TEST_F(SocketContextTest, MessageLoopSetProp)
-{
- static const int ret = -342;
- static unsigned int createShader, createProgram;
- createShader = 0;
- createProgram = 0;
- struct Caller : public FunctionCall {
- const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
- const int r = (int)_c->glCreateProgram();
- msg.set_ret(r);
- return (int *)r;
- }
- static GLuint CreateShader(const GLenum type) {
- createShader++;
- return type;
- }
- static GLuint CreateProgram() {
- createProgram++;
- return ret;
- }
- } caller;
- glesv2debugger::Message msg, read, cmd;
- hooks.gl.glCreateShader = caller.CreateShader;
- hooks.gl.glCreateProgram = caller.CreateProgram;
- dbg->expectResponse.Bit(msg.glCreateProgram, false);
-
- cmd.set_function(cmd.SETPROP);
- cmd.set_prop(cmd.ExpectResponse);
- cmd.set_arg0(cmd.glCreateProgram);
- cmd.set_arg1(true);
- cmd.set_expect_response(true);
- Write(cmd);
-
- cmd.Clear();
- cmd.set_function(cmd.glCreateShader);
- cmd.set_arg0(GL_FRAGMENT_SHADER);
- cmd.set_expect_response(true);
- Write(cmd);
-
- cmd.set_function(cmd.SETPROP);
- cmd.set_prop(cmd.CaptureDraw);
- cmd.set_arg0(819);
- cmd.set_expect_response(true);
- Write(cmd);
-
- cmd.Clear();
- cmd.set_function(cmd.CONTINUE);
- cmd.set_expect_response(true);
- Write(cmd);
-
- cmd.set_function(cmd.glCreateShader);
- cmd.set_arg0(GL_VERTEX_SHADER);
- cmd.set_expect_response(false); // MessageLoop should automatically skip afterwards
- Write(cmd);
-
- EXPECT_EQ((int *)ret, MessageLoop(caller, msg, msg.glCreateProgram));
-
- EXPECT_TRUE(dbg->expectResponse.Bit(msg.glCreateProgram));
- EXPECT_EQ(819, dbg->captureDraw);
-
- Read(read);
- EXPECT_EQ(read.glCreateProgram, read.function());
- EXPECT_EQ(read.BeforeCall, read.type());
-
- Read(read);
- EXPECT_EQ(read.glCreateShader, read.function());
- EXPECT_EQ(read.AfterGeneratedCall, read.type());
- EXPECT_EQ(GL_FRAGMENT_SHADER, read.ret());
-
- Read(read);
- EXPECT_EQ(read.glCreateProgram, read.function());
- EXPECT_EQ(read.AfterCall, read.type());
- EXPECT_EQ(ret, read.ret());
-
- Read(read);
- EXPECT_EQ(read.glCreateShader, read.function());
- EXPECT_EQ(read.AfterGeneratedCall, read.type());
- EXPECT_EQ(GL_VERTEX_SHADER, read.ret());
-
- EXPECT_EQ(2, createShader);
- EXPECT_EQ(1, createProgram);
-
- CheckNoAvailable();
-}
-
-TEST_F(SocketContextTest, TexImage2D)
-{
- static const GLenum _target = GL_TEXTURE_2D;
- static const GLint _level = 1, _internalformat = GL_RGBA;
- static const GLsizei _width = 2, _height = 2;
- static const GLint _border = 333;
- static const GLenum _format = GL_RGB, _type = GL_UNSIGNED_SHORT_5_6_5;
- static const short _pixels [_width * _height] = {11, 22, 33, 44};
- static unsigned int texImage2D;
- texImage2D = 0;
-
- struct Caller {
- static void TexImage2D(GLenum target, GLint level, GLint internalformat,
- GLsizei width, GLsizei height, GLint border,
- GLenum format, GLenum type, const GLvoid* pixels) {
- EXPECT_EQ(_target, target);
- EXPECT_EQ(_level, level);
- EXPECT_EQ(_internalformat, internalformat);
- EXPECT_EQ(_width, width);
- EXPECT_EQ(_height, height);
- EXPECT_EQ(_border, border);
- EXPECT_EQ(_format, format);
- EXPECT_EQ(_type, type);
- EXPECT_EQ(0, memcmp(_pixels, pixels, sizeof(_pixels)));
- texImage2D++;
- }
- } caller;
- glesv2debugger::Message msg, read, cmd;
- hooks.gl.glTexImage2D = caller.TexImage2D;
- dbg->expectResponse.Bit(msg.glTexImage2D, false);
-
- Debug_glTexImage2D(_target, _level, _internalformat, _width, _height, _border,
- _format, _type, _pixels);
- EXPECT_EQ(1, texImage2D);
-
- Read(read);
- EXPECT_EQ(read.glTexImage2D, read.function());
- EXPECT_EQ(read.BeforeCall, read.type());
- EXPECT_EQ(_target, read.arg0());
- EXPECT_EQ(_level, read.arg1());
- EXPECT_EQ(_internalformat, read.arg2());
- EXPECT_EQ(_width, read.arg3());
- EXPECT_EQ(_height, read.arg4());
- EXPECT_EQ(_border, read.arg5());
- EXPECT_EQ(_format, read.arg6());
- EXPECT_EQ(_type, read.arg7());
-
- EXPECT_TRUE(read.has_data());
- uint32_t dataLen = 0;
- const unsigned char * data = dbg->Decompress(read.data().data(),
- read.data().length(), &dataLen);
- EXPECT_EQ(sizeof(_pixels), dataLen);
- if (sizeof(_pixels) == dataLen)
- EXPECT_EQ(0, memcmp(_pixels, data, sizeof(_pixels)));
-
- Read(read);
- EXPECT_EQ(read.glTexImage2D, read.function());
- EXPECT_EQ(read.AfterCall, read.type());
-
- CheckNoAvailable();
-}
-
-TEST_F(SocketContextTest, CopyTexImage2D)
-{
- static const GLenum _target = GL_TEXTURE_2D;
- static const GLint _level = 1, _internalformat = GL_RGBA;
- static const GLint _x = 9, _y = 99;
- static const GLsizei _width = 2, _height = 3;
- static const GLint _border = 333;
- static const int _pixels [_width * _height] = {11, 22, 33, 44, 55, 66};
- static unsigned int copyTexImage2D, readPixels;
- copyTexImage2D = 0, readPixels = 0;
-
- struct Caller {
- static void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat,
- GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {
- EXPECT_EQ(_target, target);
- EXPECT_EQ(_level, level);
- EXPECT_EQ(_internalformat, internalformat);
- EXPECT_EQ(_x, x);
- EXPECT_EQ(_y, y);
- EXPECT_EQ(_width, width);
- EXPECT_EQ(_height, height);
- EXPECT_EQ(_border, border);
- copyTexImage2D++;
- }
- static void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type, GLvoid* pixels) {
- EXPECT_EQ(_x, x);
- EXPECT_EQ(_y, y);
- EXPECT_EQ(_width, width);
- EXPECT_EQ(_height, height);
- EXPECT_EQ(GL_RGBA, format);
- EXPECT_EQ(GL_UNSIGNED_BYTE, type);
- ASSERT_TRUE(pixels != NULL);
- memcpy(pixels, _pixels, sizeof(_pixels));
- readPixels++;
- }
- } caller;
- glesv2debugger::Message msg, read, cmd;
- hooks.gl.glCopyTexImage2D = caller.CopyTexImage2D;
- hooks.gl.glReadPixels = caller.ReadPixels;
- dbg->expectResponse.Bit(msg.glCopyTexImage2D, false);
-
- Debug_glCopyTexImage2D(_target, _level, _internalformat, _x, _y, _width, _height,
- _border);
- ASSERT_EQ(1, copyTexImage2D);
- ASSERT_EQ(1, readPixels);
-
- Read(read);
- EXPECT_EQ(read.glCopyTexImage2D, read.function());
- EXPECT_EQ(read.BeforeCall, read.type());
- EXPECT_EQ(_target, read.arg0());
- EXPECT_EQ(_level, read.arg1());
- EXPECT_EQ(_internalformat, read.arg2());
- EXPECT_EQ(_x, read.arg3());
- EXPECT_EQ(_y, read.arg4());
- EXPECT_EQ(_width, read.arg5());
- EXPECT_EQ(_height, read.arg6());
- EXPECT_EQ(_border, read.arg7());
-
- EXPECT_TRUE(read.has_data());
- EXPECT_EQ(read.ReferencedImage, read.data_type());
- EXPECT_EQ(GL_RGBA, read.pixel_format());
- EXPECT_EQ(GL_UNSIGNED_BYTE, read.pixel_type());
- uint32_t dataLen = 0;
- unsigned char * const data = dbg->Decompress(read.data().data(),
- read.data().length(), &dataLen);
- ASSERT_EQ(sizeof(_pixels), dataLen);
- for (unsigned i = 0; i < sizeof(_pixels) / sizeof(*_pixels); i++)
- EXPECT_EQ(_pixels[i], ((const int *)data)[i]) << "xor with 0 ref is identity";
- free(data);
-
- Read(read);
- EXPECT_EQ(read.glCopyTexImage2D, read.function());
- EXPECT_EQ(read.AfterCall, read.type());
-
- CheckNoAvailable();
-}
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index e84f40f..ab4eeb4 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -133,7 +133,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-Daten deaktiviert"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobile Daten deaktiviert"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Daten deaktiviert"</string>
- <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Sie haben die angegebenen Grenze für die Datennutzung erreicht."\n\n"Wenn Sie die Datennutzung erneut aktivieren, berechnet Ihr Mobilfunkanbieter unter Umständen zusätzliche Gebühren."</string>
+ <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Sie haben die angegebenen Grenze für den Datenverbrauch erreicht."\n\n"Wenn Sie die Datennutzung erneut aktivieren, berechnet Ihr Mobilfunkanbieter unter Umständen zusätzliche Gebühren."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Daten erneut aktivieren"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Keine Internetverbindung"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WLAN verbunden"</string>
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
index f45556f..9f3de69 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
@@ -19,6 +19,7 @@
import com.android.internal.R;
import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.IccCard.State;
+import com.android.internal.widget.DigitalClock;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.TransportControlView;
import com.android.internal.policy.impl.KeyguardUpdateMonitor.SimStateCallback;
@@ -105,6 +106,7 @@
private CharSequence mPlmn;
private CharSequence mSpn;
protected int mPhoneState;
+ private DigitalClock mDigitalClock;
private class TransientTextManager {
private TextView mTextView;
@@ -181,6 +183,7 @@
mTransportView = (TransportControlView) findViewById(R.id.transport);
mEmergencyCallButton = (Button) findViewById(R.id.emergencyCallButton);
mEmergencyCallButtonEnabledInScreen = emergencyButtonEnabledInScreen;
+ mDigitalClock = (DigitalClock) findViewById(R.id.time);
// Hide transport control view until we know we need to show it.
if (mTransportView != null) {
@@ -290,6 +293,12 @@
/** {@inheritDoc} */
public void onResume() {
if (DEBUG) Log.v(TAG, "onResume()");
+
+ // First update the clock, if present.
+ if (mDigitalClock != null) {
+ mDigitalClock.updateTime();
+ }
+
mUpdateMonitor.registerInfoCallback(mInfoCallback);
mUpdateMonitor.registerSimStateCallback(mSimStateCallback);
resetStatusInfo();
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 6701059..2d856ad 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -1808,7 +1808,7 @@
}
-AudioFlinger::AudioStreamOut* AudioFlinger::PlaybackThread::getOutput()
+AudioFlinger::AudioStreamOut* AudioFlinger::PlaybackThread::getOutput() const
{
Mutex::Autolock _l(mLock);
return mOutput;
@@ -1866,7 +1866,7 @@
bool AudioFlinger::MixerThread::threadLoop()
{
Vector< sp<Track> > tracksToRemove;
- uint32_t mixerStatus = MIXER_IDLE;
+ mixer_state mixerStatus = MIXER_IDLE;
nsecs_t standbyTime = systemTime();
size_t mixBufferSize = mFrameCount * mFrameSize;
// FIXME: Relaxed timing because of a certain device that can't meet latency
@@ -2085,10 +2085,11 @@
}
// prepareTracks_l() must be called with ThreadBase::mLock held
-uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track> >& activeTracks, Vector< sp<Track> > *tracksToRemove)
+AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTracks_l(
+ const SortedVector< wp<Track> >& activeTracks, Vector< sp<Track> > *tracksToRemove)
{
- uint32_t mixerStatus = MIXER_IDLE;
+ mixer_state mixerStatus = MIXER_IDLE;
// find out which tracks need to be processed
size_t count = activeTracks.size();
size_t mixedTracks = 0;
@@ -2612,7 +2613,7 @@
bool AudioFlinger::DirectOutputThread::threadLoop()
{
- uint32_t mixerStatus = MIXER_IDLE;
+ mixer_state mixerStatus = MIXER_IDLE;
sp<Track> trackToRemove;
sp<Track> activeTrack;
nsecs_t standbyTime = systemTime();
@@ -3009,7 +3010,7 @@
bool AudioFlinger::DuplicatingThread::threadLoop()
{
Vector< sp<Track> > tracksToRemove;
- uint32_t mixerStatus = MIXER_IDLE;
+ mixer_state mixerStatus = MIXER_IDLE;
nsecs_t standbyTime = systemTime();
size_t mixBufferSize = mFrameCount*mFrameSize;
SortedVector< sp<OutputTrack> > outputTracks;
@@ -3549,7 +3550,7 @@
sp<ThreadBase> thread = mThread.promote();
if (thread != 0) {
Mutex::Autolock _l(thread->mLock);
- int state = mState;
+ track_state state = mState;
// here the track could be either new, or restarted
// in both cases "unstop" the track
if (mState == PAUSED) {
@@ -3590,7 +3591,7 @@
sp<ThreadBase> thread = mThread.promote();
if (thread != 0) {
Mutex::Autolock _l(thread->mLock);
- int state = mState;
+ track_state state = mState;
if (mState > STOPPED) {
mState = STOPPED;
// If the track is not active (PAUSED and buffers full), flush buffers
@@ -4107,6 +4108,10 @@
mTrack->destroy();
}
+sp<IMemory> AudioFlinger::TrackHandle::getCblk() const {
+ return mTrack->getCblk();
+}
+
status_t AudioFlinger::TrackHandle::start() {
return mTrack->start();
}
@@ -4127,10 +4132,6 @@
mTrack->pause();
}
-sp<IMemory> AudioFlinger::TrackHandle::getCblk() const {
- return mTrack->getCblk();
-}
-
status_t AudioFlinger::TrackHandle::attachAuxEffect(int EffectId)
{
return mTrack->attachAuxEffect(EffectId);
@@ -4237,6 +4238,10 @@
stop();
}
+sp<IMemory> AudioFlinger::RecordHandle::getCblk() const {
+ return mRecordTrack->getCblk();
+}
+
status_t AudioFlinger::RecordHandle::start() {
ALOGV("RecordHandle::start()");
return mRecordTrack->start();
@@ -4247,10 +4252,6 @@
mRecordTrack->stop();
}
-sp<IMemory> AudioFlinger::RecordHandle::getCblk() const {
- return mRecordTrack->getCblk();
-}
-
status_t AudioFlinger::RecordHandle::onTransact(
uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
@@ -4897,7 +4898,7 @@
return mTrack;
}
-AudioFlinger::AudioStreamIn* AudioFlinger::RecordThread::getInput()
+AudioFlinger::AudioStreamIn* AudioFlinger::RecordThread::getInput() const
{
Mutex::Autolock _l(mLock);
return mInput;
@@ -5045,6 +5046,7 @@
if (thread->type() != ThreadBase::DUPLICATING) {
AudioStreamOut *out = thread->clearOutput();
+ assert(out != NULL);
// from now on thread->mOutput is NULL
out->hwDev->close_output_stream(out->hwDev, out->stream);
delete out;
@@ -5186,6 +5188,7 @@
thread->exit();
AudioStreamIn *in = thread->clearInput();
+ assert(in != NULL);
// from now on thread->mInput is NULL
in->hwDev->close_input_stream(in->hwDev, in->stream);
delete in;
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 48edfcd..766ba44 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -375,7 +375,7 @@
void* mBufferEnd;
uint32_t mFrameCount;
// we don't really need a lock for these
- int mState;
+ track_state mState;
int mClientTid;
audio_format_t mFormat;
uint32_t mFlags;
@@ -727,7 +727,7 @@
int sessionId,
status_t *status);
- AudioStreamOut* getOutput();
+ AudioStreamOut* getOutput() const;
AudioStreamOut* clearOutput();
virtual audio_stream_t* stream();
@@ -804,7 +804,7 @@
SortedVector< sp<Track> > mTracks;
// mStreamTypes[] uses 1 additional stream type internally for the OutputTrack used by DuplicatingThread
stream_type_t mStreamTypes[AUDIO_STREAM_CNT + 1];
- AudioStreamOut* mOutput;
+ AudioStreamOut *mOutput;
float mMasterVolume;
nsecs_t mLastWriteTime;
int mNumWrites;
@@ -828,7 +828,7 @@
virtual status_t dumpInternals(int fd, const Vector<String16>& args);
protected:
- uint32_t prepareTracks_l(const SortedVector< wp<Track> >& activeTracks,
+ mixer_state prepareTracks_l(const SortedVector< wp<Track> >& activeTracks,
Vector< sp<Track> > *tracksToRemove);
virtual int getTrackName_l();
virtual void deleteTrackName_l(int name);
@@ -836,8 +836,7 @@
virtual uint32_t suspendSleepTimeUs();
AudioMixer* mAudioMixer;
- uint32_t mPrevMixerStatus; // previous status (mixer_state) returned by
- // prepareTracks_l()
+ mixer_state mPrevMixerStatus; // previous status returned by prepareTracks_l()
};
class DirectOutputThread : public PlaybackThread {
@@ -908,12 +907,12 @@
public:
TrackHandle(const sp<PlaybackThread::Track>& track);
virtual ~TrackHandle();
+ virtual sp<IMemory> getCblk() const;
virtual status_t start();
virtual void stop();
virtual void flush();
virtual void mute(bool);
virtual void pause();
- virtual sp<IMemory> getCblk() const;
virtual status_t attachAuxEffect(int effectId);
virtual status_t onTransact(
uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags);
@@ -994,7 +993,7 @@
status_t start(RecordTrack* recordTrack);
void stop(RecordTrack* recordTrack);
status_t dump(int fd, const Vector<String16>& args);
- AudioStreamIn* getInput();
+ AudioStreamIn* getInput() const;
AudioStreamIn* clearInput();
virtual audio_stream_t* stream();
@@ -1031,9 +1030,9 @@
public:
RecordHandle(const sp<RecordThread::RecordTrack>& recordTrack);
virtual ~RecordHandle();
+ virtual sp<IMemory> getCblk() const;
virtual status_t start();
virtual void stop();
- virtual sp<IMemory> getCblk() const;
virtual status_t onTransact(
uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags);
private:
@@ -1087,7 +1086,7 @@
void reset_l();
status_t configure();
status_t init();
- uint32_t state() {
+ effect_state state() const {
return mState;
}
uint32_t status() {
@@ -1152,8 +1151,8 @@
effect_descriptor_t mDescriptor;// effect descriptor received from effect engine
effect_config_t mConfig; // input and output audio configuration
effect_handle_t mEffectInterface; // Effect module C API
- status_t mStatus; // initialization status
- uint32_t mState; // current activation state (effect_state)
+ status_t mStatus; // initialization status
+ effect_state mState; // current activation state
Vector< wp<EffectHandle> > mHandles; // list of client handles
uint32_t mMaxDisableWaitCnt; // maximum grace period before forcing an effect off after
// sending disable command.
@@ -1357,17 +1356,21 @@
KeyedVector< int, sp<SuspendedEffectDesc> > mSuspendedEffects;
};
+ // AudioStreamOut and AudioStreamIn are immutable, so their fields are const.
+ // For emphasis, we could also make all pointers to them be "const *",
+ // but that would clutter the code unnecessarily.
+
struct AudioStreamOut {
- audio_hw_device_t *hwDev;
- audio_stream_out_t *stream;
+ audio_hw_device_t* const hwDev;
+ audio_stream_out_t* const stream;
AudioStreamOut(audio_hw_device_t *dev, audio_stream_out_t *out) :
hwDev(dev), stream(out) {}
};
struct AudioStreamIn {
- audio_hw_device_t *hwDev;
- audio_stream_in_t *stream;
+ audio_hw_device_t* const hwDev;
+ audio_stream_in_t* const stream;
AudioStreamIn(audio_hw_device_t *dev, audio_stream_in_t *in) :
hwDev(dev), stream(in) {}
diff --git a/services/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp
index 28b1c89..2df1385 100644
--- a/services/audioflinger/AudioPolicyService.cpp
+++ b/services/audioflinger/AudioPolicyService.cpp
@@ -287,7 +287,7 @@
mpAudioPolicy->release_output(mpAudioPolicy, output);
}
-audio_io_handle_t AudioPolicyService::getInput(int inputSource,
+audio_io_handle_t AudioPolicyService::getInput(audio_source_t inputSource,
uint32_t samplingRate,
audio_format_t format,
uint32_t channels,
@@ -297,6 +297,10 @@
if (mpAudioPolicy == NULL) {
return 0;
}
+ // already checked by client, but double-check in case the client wrapper is bypassed
+ if (uint32_t(inputSource) >= AUDIO_SOURCE_CNT) {
+ return 0;
+ }
Mutex::Autolock _l(mLock);
audio_io_handle_t input = mpAudioPolicy->get_input(mpAudioPolicy, inputSource, samplingRate,
format, channels, acoustics);
@@ -305,7 +309,7 @@
return input;
}
// create audio pre processors according to input source
- ssize_t index = mInputSources.indexOfKey((audio_source_t)inputSource);
+ ssize_t index = mInputSources.indexOfKey(inputSource);
if (index < 0) {
return input;
}
diff --git a/services/audioflinger/AudioPolicyService.h b/services/audioflinger/AudioPolicyService.h
index 9811670..3c0f5ed 100644
--- a/services/audioflinger/AudioPolicyService.h
+++ b/services/audioflinger/AudioPolicyService.h
@@ -74,7 +74,7 @@
audio_stream_type_t stream,
int session = 0);
virtual void releaseOutput(audio_io_handle_t output);
- virtual audio_io_handle_t getInput(int inputSource,
+ virtual audio_io_handle_t getInput(audio_source_t inputSource,
uint32_t samplingRate = 0,
audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channels = 0,
diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp
index 9f09062..ad64ccd 100644
--- a/services/input/InputDispatcher.cpp
+++ b/services/input/InputDispatcher.cpp
@@ -238,6 +238,8 @@
nsecs_t nextWakeupTime = LONG_LONG_MAX;
{ // acquire lock
AutoMutex _l(mLock);
+ mDispatcherIsAliveCondition.broadcast();
+
dispatchOnceInnerLocked(&nextWakeupTime);
if (runCommandsLockedInterruptible()) {
@@ -4086,6 +4088,8 @@
void InputDispatcher::monitor() {
// Acquire and release the lock to ensure that the dispatcher has not deadlocked.
mLock.lock();
+ mLooper->wake();
+ mDispatcherIsAliveCondition.wait(mLock);
mLock.unlock();
}
diff --git a/services/input/InputDispatcher.h b/services/input/InputDispatcher.h
index 1478d67..a1d42e1 100644
--- a/services/input/InputDispatcher.h
+++ b/services/input/InputDispatcher.h
@@ -862,6 +862,8 @@
Mutex mLock;
+ Condition mDispatcherIsAliveCondition;
+
sp<Looper> mLooper;
EventEntry* mPendingEvent;
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index fa0b3d8..4be06e4 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -278,17 +278,20 @@
{ // acquire lock
AutoMutex _l(mLock);
+ mReaderIsAliveCondition.broadcast();
if (count) {
processEventsLocked(mEventBuffer, count);
}
if (!count || timeoutMillis == 0) {
nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
+ if (now >= mNextTimeout) {
#if DEBUG_RAW_EVENTS
- ALOGD("Timeout expired, latency=%0.3fms", (now - mNextTimeout) * 0.000001f);
+ ALOGD("Timeout expired, latency=%0.3fms", (now - mNextTimeout) * 0.000001f);
#endif
- mNextTimeout = LLONG_MAX;
- timeoutExpiredLocked(now);
+ mNextTimeout = LLONG_MAX;
+ timeoutExpiredLocked(now);
+ }
}
} // release lock
@@ -772,6 +775,8 @@
void InputReader::monitor() {
// Acquire and release the lock to ensure that the reader has not deadlocked.
mLock.lock();
+ mEventHub->wake();
+ mReaderIsAliveCondition.wait(mLock);
mLock.unlock();
// Check the EventHub
diff --git a/services/input/InputReader.h b/services/input/InputReader.h
index a122c97..ad89a22 100644
--- a/services/input/InputReader.h
+++ b/services/input/InputReader.h
@@ -363,6 +363,8 @@
private:
Mutex mLock;
+ Condition mReaderIsAliveCondition;
+
sp<EventHubInterface> mEventHub;
sp<InputReaderPolicyInterface> mPolicy;
sp<QueuedInputListener> mQueuedListener;
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index a294281..8e87b88 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -553,8 +553,6 @@
result.append(buffer);
- LayerBase::dumpStats(result, buffer, SIZE);
-
if (mSurfaceTexture != 0) {
mSurfaceTexture->dump(result, " ", buffer, SIZE);
}
@@ -580,6 +578,12 @@
result.append("\n");
}
+void Layer::clearStats()
+{
+ LayerBaseClient::clearStats();
+ memset(mFrameStats, 0, sizeof(mFrameStats));
+}
+
uint32_t Layer::getEffectiveUsage(uint32_t usage) const
{
// TODO: should we do something special if mSecure is set?
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h
index b3fa5e7..2dd4da1 100644
--- a/services/surfaceflinger/Layer.h
+++ b/services/surfaceflinger/Layer.h
@@ -88,6 +88,7 @@
virtual void onFirstRef();
virtual void dump(String8& result, char* scratch, size_t size) const;
virtual void dumpStats(String8& result, char* buffer, size_t SIZE) const;
+ virtual void clearStats();
private:
friend class SurfaceTextureLayer;
diff --git a/services/surfaceflinger/LayerBase.cpp b/services/surfaceflinger/LayerBase.cpp
index 1e2c4cb..d32fcdd 100644
--- a/services/surfaceflinger/LayerBase.cpp
+++ b/services/surfaceflinger/LayerBase.cpp
@@ -489,13 +489,14 @@
result.append(buffer);
}
-void LayerBase::shortDump(String8& result, char* scratch, size_t size) const
-{
+void LayerBase::shortDump(String8& result, char* scratch, size_t size) const {
LayerBase::dump(result, scratch, size);
}
-void LayerBase::dumpStats(String8& result, char* scratch, size_t SIZE) const
-{
+void LayerBase::dumpStats(String8& result, char* scratch, size_t SIZE) const {
+}
+
+void LayerBase::clearStats() {
}
// ---------------------------------------------------------------------------
diff --git a/services/surfaceflinger/LayerBase.h b/services/surfaceflinger/LayerBase.h
index 03d2cc6..6b62c9d 100644
--- a/services/surfaceflinger/LayerBase.h
+++ b/services/surfaceflinger/LayerBase.h
@@ -212,6 +212,7 @@
virtual void dump(String8& result, char* scratch, size_t size) const;
virtual void shortDump(String8& result, char* scratch, size_t size) const;
virtual void dumpStats(String8& result, char* buffer, size_t SIZE) const;
+ virtual void clearStats();
enum { // flags for doTransaction()
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 883b642..0563999 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1486,12 +1486,27 @@
bool dumpAll = true;
size_t index = 0;
- if (args.size()) {
+ size_t numArgs = args.size();
+ if (numArgs) {
dumpAll = false;
- if (args[index] == String16("--latency")) {
+
+ if ((index < numArgs) &&
+ (args[index] == String16("--list"))) {
+ index++;
+ listLayersLocked(args, index, result, buffer, SIZE);
+ }
+
+ if ((index < numArgs) &&
+ (args[index] == String16("--latency"))) {
index++;
dumpStatsLocked(args, index, result, buffer, SIZE);
}
+
+ if ((index < numArgs) &&
+ (args[index] == String16("--latency-clear"))) {
+ index++;
+ clearStatsLocked(args, index, result, buffer, SIZE);
+ }
}
if (dumpAll) {
@@ -1506,6 +1521,18 @@
return NO_ERROR;
}
+void SurfaceFlinger::listLayersLocked(const Vector<String16>& args, size_t& index,
+ String8& result, char* buffer, size_t SIZE) const
+{
+ const LayerVector& currentLayers = mCurrentState.layersSortedByZ;
+ const size_t count = currentLayers.size();
+ for (size_t i=0 ; i<count ; i++) {
+ const sp<LayerBase>& layer(currentLayers[i]);
+ snprintf(buffer, SIZE, "%s\n", layer->getName().string());
+ result.append(buffer);
+ }
+}
+
void SurfaceFlinger::dumpStatsLocked(const Vector<String16>& args, size_t& index,
String8& result, char* buffer, size_t SIZE) const
{
@@ -1529,6 +1556,25 @@
}
}
+void SurfaceFlinger::clearStatsLocked(const Vector<String16>& args, size_t& index,
+ String8& result, char* buffer, size_t SIZE) const
+{
+ String8 name;
+ if (index < args.size()) {
+ name = String8(args[index]);
+ index++;
+ }
+
+ const LayerVector& currentLayers = mCurrentState.layersSortedByZ;
+ const size_t count = currentLayers.size();
+ for (size_t i=0 ; i<count ; i++) {
+ const sp<LayerBase>& layer(currentLayers[i]);
+ if (name.isEmpty() || (name == layer->getName())) {
+ layer->clearStats();
+ }
+ }
+}
+
void SurfaceFlinger::dumpAllLocked(
String8& result, char* buffer, size_t SIZE) const
{
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index c976e5a..b1b6116 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -337,8 +337,12 @@
void debugFlashRegions();
void drawWormhole() const;
+ void listLayersLocked(const Vector<String16>& args, size_t& index,
+ String8& result, char* buffer, size_t SIZE) const;
void dumpStatsLocked(const Vector<String16>& args, size_t& index,
String8& result, char* buffer, size_t SIZE) const;
+ void clearStatsLocked(const Vector<String16>& args, size_t& index,
+ String8& result, char* buffer, size_t SIZE) const;
void dumpAllLocked(String8& result, char* buffer, size_t SIZE) const;
mutable MessageQueue mEventQueue;
diff --git a/telephony/java/com/android/internal/telephony/CallManager.java b/telephony/java/com/android/internal/telephony/CallManager.java
index 3dd57ee..f825f31 100644
--- a/telephony/java/com/android/internal/telephony/CallManager.java
+++ b/telephony/java/com/android/internal/telephony/CallManager.java
@@ -373,10 +373,19 @@
AudioManager audioManager = (AudioManager)
context.getSystemService(Context.AUDIO_SERVICE);
- int mode = AudioManager.MODE_NORMAL;
+ // change the audio mode and request/abandon audio focus according to phone state,
+ // but only on audio mode transitions
switch (getState()) {
case RINGING:
- mode = AudioManager.MODE_RINGTONE;
+ if (audioManager.getMode() != AudioManager.MODE_RINGTONE) {
+ // only request audio focus if the ringtone is going to be heard
+ if (audioManager.getStreamVolume(AudioManager.STREAM_RING) > 0) {
+ if (VDBG) Log.d(LOG_TAG, "requestAudioFocus on STREAM_RING");
+ audioManager.requestAudioFocusForCall(AudioManager.STREAM_RING,
+ AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
+ }
+ audioManager.setMode(AudioManager.MODE_RINGTONE);
+ }
break;
case OFFHOOK:
Phone offhookPhone = getFgPhone();
@@ -386,18 +395,28 @@
offhookPhone = getBgPhone();
}
+ int newAudioMode = AudioManager.MODE_IN_CALL;
if (offhookPhone instanceof SipPhone) {
- // enable IN_COMMUNICATION audio mode for sipPhone
- mode = AudioManager.MODE_IN_COMMUNICATION;
- } else {
- // enable IN_CALL audio mode for telephony
- mode = AudioManager.MODE_IN_CALL;
+ // enable IN_COMMUNICATION audio mode instead for sipPhone
+ newAudioMode = AudioManager.MODE_IN_COMMUNICATION;
+ }
+ if (audioManager.getMode() != newAudioMode) {
+ // request audio focus before setting the new mode
+ if (VDBG) Log.d(LOG_TAG, "requestAudioFocus on STREAM_VOICE_CALL");
+ audioManager.requestAudioFocusForCall(AudioManager.STREAM_VOICE_CALL,
+ AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
+ audioManager.setMode(newAudioMode);
+ }
+ break;
+ case IDLE:
+ if (audioManager.getMode() != AudioManager.MODE_NORMAL) {
+ audioManager.setMode(AudioManager.MODE_NORMAL);
+ if (VDBG) Log.d(LOG_TAG, "abandonAudioFocus");
+ // abandon audio focus after the mode has been set back to normal
+ audioManager.abandonAudioFocusForCall();
}
break;
}
- // calling audioManager.setMode() multiple times in a short period of
- // time seems to break the audio recorder in in-call mode
- if (audioManager.getMode() != mode) audioManager.setMode(mode);
}
private Context getContext() {
diff --git a/test-runner/src/android/test/mock/MockContentProvider.java b/test-runner/src/android/test/mock/MockContentProvider.java
index e0ce322..4ff943e 100644
--- a/test-runner/src/android/test/mock/MockContentProvider.java
+++ b/test-runner/src/android/test/mock/MockContentProvider.java
@@ -21,6 +21,7 @@
import android.content.ContentProviderResult;
import android.content.ContentValues;
import android.content.Context;
+import android.content.ICancelationSignal;
import android.content.IContentProvider;
import android.content.OperationApplicationException;
import android.content.pm.PathPermission;
@@ -92,7 +93,7 @@
@Override
public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs,
- String sortOrder) throws RemoteException {
+ String sortOrder, ICancelationSignal cancelationSignal) throws RemoteException {
return MockContentProvider.this.query(url, projection, selection,
selectionArgs, sortOrder);
}
@@ -124,6 +125,11 @@
throws RemoteException, FileNotFoundException {
return MockContentProvider.this.openTypedAssetFile(url, mimeType, opts);
}
+
+ @Override
+ public ICancelationSignal createCancelationSignal() throws RemoteException {
+ return null;
+ }
}
private final InversionIContentProvider mIContentProvider = new InversionIContentProvider();
diff --git a/test-runner/src/android/test/mock/MockIContentProvider.java b/test-runner/src/android/test/mock/MockIContentProvider.java
index b7733a4..41bc27d 100644
--- a/test-runner/src/android/test/mock/MockIContentProvider.java
+++ b/test-runner/src/android/test/mock/MockIContentProvider.java
@@ -21,6 +21,7 @@
import android.content.ContentValues;
import android.content.EntityIterator;
import android.content.IContentProvider;
+import android.content.ICancelationSignal;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.net.Uri;
@@ -72,7 +73,7 @@
}
public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs,
- String sortOrder) {
+ String sortOrder, ICancelationSignal cancelationSignal) {
throw new UnsupportedOperationException("unimplemented mock method");
}
@@ -103,4 +104,9 @@
throws RemoteException, FileNotFoundException {
throw new UnsupportedOperationException("unimplemented mock method");
}
+
+ @Override
+ public ICancelationSignal createCancelationSignal() throws RemoteException {
+ throw new UnsupportedOperationException("unimplemented mock method");
+ }
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
index c91a3bf..c64ab65 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
@@ -19,6 +19,7 @@
import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
import android.content.ContentValues;
+import android.content.ICancelationSignal;
import android.content.IContentProvider;
import android.content.OperationApplicationException;
import android.content.res.AssetFileDescriptor;
@@ -90,8 +91,8 @@
}
@Override
- public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3, String arg4)
- throws RemoteException {
+ public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3, String arg4,
+ ICancelationSignal arg5) throws RemoteException {
// TODO Auto-generated method stub
return null;
}
@@ -122,4 +123,9 @@
return null;
}
+ @Override
+ public ICancelationSignal createCancelationSignal() throws RemoteException {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 8c9e472..b8b7c0e 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -1625,6 +1625,10 @@
private void handleNetworkDisconnect() {
if (DBG) log("Stopping DHCP and clearing IP");
+ /* In case we were in middle of DHCP operation
+ restore back powermode */
+ handlePostDhcpSetup();
+
/*
* stop DHCP
*/