field public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
field public static final java.lang.String BIND_DEVICE_ADMIN = "android.permission.BIND_DEVICE_ADMIN";
field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
+ field public static final java.lang.String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE";
field public static final java.lang.String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
field public static final java.lang.String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
field public static final java.lang.String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS";
mListener = listener;
}
+ @Override
public void addSensorEvent(Sensor sensor) {
SensorEvent t = new SensorEvent(Sensor.getMaxLengthValuesArray(sensor,
mManager.mTargetSdkLevel));
- mSensorsEvents.put(sensor.getHandle(), t);
+ synchronized (mSensorsEvents) {
+ mSensorsEvents.put(sensor.getHandle(), t);
+ }
}
+ @Override
public void removeSensorEvent(Sensor sensor) {
- mSensorsEvents.delete(sensor.getHandle());
+ synchronized (mSensorsEvents) {
+ mSensorsEvents.delete(sensor.getHandle());
+ }
}
// Called from native code.
protected void dispatchSensorEvent(int handle, float[] values, int inAccuracy,
long timestamp) {
final Sensor sensor = sHandleToSensor.get(handle);
- SensorEvent t = mSensorsEvents.get(handle);
+ SensorEvent t = null;
+ synchronized (mSensorsEvents) {
+ t = mSensorsEvents.get(handle);
+ }
+
if (t == null) {
- Log.e(TAG, "Error: Sensor Event is null for Sensor: " + sensor);
+ // This may happen if the client has unregistered and there are pending events in
+ // the queue waiting to be delivered. Ignore.
return;
}
// Copy from the values array.
mListener = listener;
}
+ @Override
public void addSensorEvent(Sensor sensor) {
TriggerEvent t = new TriggerEvent(Sensor.getMaxLengthValuesArray(sensor,
mManager.mTargetSdkLevel));
- mTriggerEvents.put(sensor.getHandle(), t);
+ synchronized (mTriggerEvents) {
+ mTriggerEvents.put(sensor.getHandle(), t);
+ }
}
+ @Override
public void removeSensorEvent(Sensor sensor) {
- mTriggerEvents.delete(sensor.getHandle());
+ synchronized (mTriggerEvents) {
+ mTriggerEvents.delete(sensor.getHandle());
+ }
}
// Called from native code.
protected void dispatchSensorEvent(int handle, float[] values, int accuracy,
long timestamp) {
final Sensor sensor = sHandleToSensor.get(handle);
- TriggerEvent t = mTriggerEvents.get(handle);
+ TriggerEvent t = null;
+ synchronized (mTriggerEvents) {
+ t = mTriggerEvents.get(handle);
+ }
if (t == null) {
Log.e(TAG, "Error: Trigger Event is null for Sensor: " + sensor);
return;
private ViewGroup mSceneRoot;
private ViewGroup mLayout; // alternative to layoutId
Runnable mEnterAction, mExitAction;
- private static ThreadLocal<SparseArray<Scene>> sScenes = new ThreadLocal<SparseArray<Scene>>();
/**
* Returns a Scene described by the resource file associated with the given
- * <code>layoutId</code> parameter. If such a Scene has already been created,
- * that same Scene will be returned. This caching of layoutId-based scenes enables
- * sharing of common scenes between those created in code and those referenced
- * by {@link TransitionManager} XML resource files.
+ * <code>layoutId</code> parameter. If such a Scene has already been created for
+ * the given <code>sceneRoot</code>, that same Scene will be returned.
+ * This caching of layoutId-based scenes enables sharing of common scenes
+ * between those created in code and those referenced by {@link TransitionManager}
+ * XML resource files.
*
* @param sceneRoot The root of the hierarchy in which scene changes
* and transitions will take place.
* @param layoutId The id of a standard layout resource file.
* @param context The context used in the process of inflating
* the layout resource.
- * @return
+ * @return The scene for the given root and layout id
*/
public static Scene getSceneForLayout(ViewGroup sceneRoot, int layoutId, Context context) {
- SparseArray<Scene> scenes = sScenes.get();
+ SparseArray<Scene> scenes = (SparseArray<Scene>) sceneRoot.getTag(
+ com.android.internal.R.id.scene_layoutid_cache);
if (scenes == null) {
scenes = new SparseArray<Scene>();
- sScenes.set(scenes);
+ sceneRoot.setTag(com.android.internal.R.id.scene_layoutid_cache, scenes);
}
Scene scene = scenes.get(layoutId);
if (scene != null) {
* false otherwise
*/
void captureValues(ViewGroup sceneRoot, boolean start) {
- if (start) {
- mStartValues.viewValues.clear();
- mStartValues.idValues.clear();
- mStartValues.itemIdValues.clear();
- } else {
- mEndValues.viewValues.clear();
- mEndValues.idValues.clear();
- mEndValues.itemIdValues.clear();
- }
+ clearValues(start);
if (mTargetIds.size() > 0 || mTargets.size() > 0) {
if (mTargetIds.size() > 0) {
for (int i = 0; i < mTargetIds.size(); ++i) {
}
/**
+ * Clear valuesMaps for specified start/end state
+ *
+ * @param start true if the start values should be cleared, false otherwise
+ */
+ void clearValues(boolean start) {
+ if (start) {
+ mStartValues.viewValues.clear();
+ mStartValues.idValues.clear();
+ mStartValues.itemIdValues.clear();
+ } else {
+ mEndValues.viewValues.clear();
+ mEndValues.idValues.clear();
+ mEndValues.itemIdValues.clear();
+ }
+ }
+
+ /**
* Recursive method which captures values for an entire view hierarchy,
* starting at some root view. Transitions without targetIDs will use this
* method to capture values for all possible views.
import android.content.Context;
import android.util.ArrayMap;
import android.util.Log;
+import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
private static void sceneChangeRunTransition(final ViewGroup sceneRoot,
final Transition transition) {
- if (transition != null) {
- final ViewTreeObserver observer = sceneRoot.getViewTreeObserver();
- final ViewTreeObserver.OnPreDrawListener listener =
- new ViewTreeObserver.OnPreDrawListener() {
- public boolean onPreDraw() {
- sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
- sPendingTransitions.remove(sceneRoot);
- // Add to running list, handle end to remove it
- final ArrayMap<ViewGroup, ArrayList<Transition>> runningTransitions =
- getRunningTransitions();
- ArrayList<Transition> currentTransitions = runningTransitions.get(sceneRoot);
- ArrayList<Transition> previousRunningTransitions = null;
- if (currentTransitions == null) {
- currentTransitions = new ArrayList<Transition>();
- runningTransitions.put(sceneRoot, currentTransitions);
- } else if (currentTransitions.size() > 0) {
- previousRunningTransitions = new ArrayList<Transition>(currentTransitions);
- }
- currentTransitions.add(transition);
- transition.addListener(new Transition.TransitionListenerAdapter() {
- @Override
- public void onTransitionEnd(Transition transition) {
- ArrayList<Transition> currentTransitions =
- runningTransitions.get(sceneRoot);
- currentTransitions.remove(transition);
- }
- });
- transition.captureValues(sceneRoot, false);
- if (previousRunningTransitions != null) {
- for (Transition runningTransition : previousRunningTransitions) {
- runningTransition.resume();
- }
- }
- transition.playTransition(sceneRoot);
+ if (transition != null && sceneRoot != null) {
+ MultiListener listener = new MultiListener(transition, sceneRoot);
+ sceneRoot.addOnAttachStateChangeListener(listener);
+ sceneRoot.getViewTreeObserver().addOnPreDrawListener(listener);
+ }
+ }
+
+ /**
+ * This private utility class is used to listen for both OnPreDraw and
+ * OnAttachStateChange events. OnPreDraw events are the main ones we care
+ * about since that's what triggers the transition to take place.
+ * OnAttachStateChange events are also important in case the view is removed
+ * from the hierarchy before the OnPreDraw event takes place; it's used to
+ * clean up things since the OnPreDraw listener didn't get called in time.
+ */
+ private static class MultiListener implements ViewTreeObserver.OnPreDrawListener,
+ View.OnAttachStateChangeListener {
+
+ Transition mTransition;
+ ViewGroup mSceneRoot;
+
+ MultiListener(Transition transition, ViewGroup sceneRoot) {
+ mTransition = transition;
+ mSceneRoot = sceneRoot;
+ }
+
+ private void removeListeners() {
+ mSceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
+ mSceneRoot.removeOnAttachStateChangeListener(this);
+ }
- return true;
+ @Override
+ public void onViewAttachedToWindow(View v) {
+ }
+
+ @Override
+ public void onViewDetachedFromWindow(View v) {
+ removeListeners();
+
+ sPendingTransitions.remove(mSceneRoot);
+ ArrayList<Transition> runningTransitions = getRunningTransitions().get(mSceneRoot);
+ if (runningTransitions != null && runningTransitions.size() > 0) {
+ for (Transition runningTransition : runningTransitions) {
+ runningTransition.resume();
}
- };
- observer.addOnPreDrawListener(listener);
+ }
+ mTransition.clearValues(true);
}
- }
+
+ @Override
+ public boolean onPreDraw() {
+ removeListeners();
+ sPendingTransitions.remove(mSceneRoot);
+ // Add to running list, handle end to remove it
+ final ArrayMap<ViewGroup, ArrayList<Transition>> runningTransitions =
+ getRunningTransitions();
+ ArrayList<Transition> currentTransitions = runningTransitions.get(mSceneRoot);
+ ArrayList<Transition> previousRunningTransitions = null;
+ if (currentTransitions == null) {
+ currentTransitions = new ArrayList<Transition>();
+ runningTransitions.put(mSceneRoot, currentTransitions);
+ } else if (currentTransitions.size() > 0) {
+ previousRunningTransitions = new ArrayList<Transition>(currentTransitions);
+ }
+ currentTransitions.add(mTransition);
+ mTransition.addListener(new Transition.TransitionListenerAdapter() {
+ @Override
+ public void onTransitionEnd(Transition transition) {
+ ArrayList<Transition> currentTransitions =
+ runningTransitions.get(mSceneRoot);
+ currentTransitions.remove(transition);
+ }
+ });
+ mTransition.captureValues(mSceneRoot, false);
+ if (previousRunningTransitions != null) {
+ for (Transition runningTransition : previousRunningTransitions) {
+ runningTransition.resume();
+ }
+ }
+ mTransition.playTransition(mSceneRoot);
+
+ return true;
+ }
+ };
private static void sceneChangeSetup(ViewGroup sceneRoot, Transition transition) {
};
static final String[] STATE_NAMES = new String[] {
- "Persistent", "Top ", "Imp Fg ", "Imp Bg ",
- "Backup ", "Heavy Wght", "Service ", "Service Rs",
- "Receiver ", "Home ",
- "Last Act ", "Cch Act ", "Cch CliAct", "Cch Empty "
+ "Persist", "Top ", "ImpFg ", "ImpBg ",
+ "Backup ", "HeavyWt", "Service", "ServRst",
+ "Receivr", "Home ",
+ "LastAct", "CchAct ", "CchCAct", "CchEmty"
};
public static final String[] ADJ_SCREEN_NAMES_CSV = new String[] {
private static void printScreenLabel(PrintWriter pw, int offset) {
switch (offset) {
case ADJ_NOTHING:
- pw.print(" ");
+ pw.print(" ");
break;
case ADJ_SCREEN_OFF:
- pw.print("Screen Off / ");
+ pw.print("SOff/");
break;
case ADJ_SCREEN_ON:
- pw.print("Screen On / ");
+ pw.print("SOn /");
break;
default:
- pw.print("?????????? / ");
+ pw.print("????/");
break;
}
}
}
}
- private static void printMemLabel(PrintWriter pw, int offset) {
+ private static void printMemLabel(PrintWriter pw, int offset, char sep) {
switch (offset) {
case ADJ_NOTHING:
- pw.print(" ");
+ pw.print(" ");
+ if (sep != 0) pw.print(' ');
break;
case ADJ_MEM_FACTOR_NORMAL:
- pw.print("Norm / ");
+ pw.print("Norm");
+ if (sep != 0) pw.print(sep);
break;
case ADJ_MEM_FACTOR_MODERATE:
- pw.print("Mod / ");
+ pw.print("Mod ");
+ if (sep != 0) pw.print(sep);
break;
case ADJ_MEM_FACTOR_LOW:
- pw.print("Low / ");
+ pw.print("Low ");
+ if (sep != 0) pw.print(sep);
break;
case ADJ_MEM_FACTOR_CRITICAL:
- pw.print("Crit / ");
+ pw.print("Crit");
+ if (sep != 0) pw.print(sep);
break;
default:
- pw.print("???? / ");
+ pw.print("????");
+ if (sep != 0) pw.print(sep);
break;
}
}
printScreenLabel(pw, printedScreen != iscreen
? iscreen : STATE_NOTHING);
printedScreen = iscreen;
- printMemLabel(pw, printedMem != imem ? imem : STATE_NOTHING);
+ printMemLabel(pw, printedMem != imem ? imem : STATE_NOTHING, (char)0);
printedMem = imem;
+ pw.print(": ");
TimeUtils.formatDuration(time, pw); pw.println(running);
}
totalTime += time;
}
if (totalTime != 0 && pw != null) {
pw.print(prefix);
- printScreenLabel(pw, STATE_NOTHING);
- pw.print("TOTAL: ");
+ pw.print(" TOTAL: ");
TimeUtils.formatDuration(totalTime, pw);
pw.println();
}
printedScreen = iscreen;
}
if (memStates.length > 1) {
- printMemLabel(pw, printedMem != imem ? imem : STATE_NOTHING);
+ printMemLabel(pw, printedMem != imem ? imem : STATE_NOTHING, '/');
printedMem = imem;
}
pw.print(STATE_NAMES[procStates[ip]]); pw.print(": ");
printScreenLabel(pw, STATE_NOTHING);
}
if (memStates.length > 1) {
- printMemLabel(pw, STATE_NOTHING);
+ printMemLabel(pw, STATE_NOTHING, '/');
}
- pw.print("TOTAL : ");
+ pw.print("TOTAL : ");
TimeUtils.formatDuration(totalTime, pw);
pw.println();
}
printedScreen = iscreen;
}
if (memStates.length > 1) {
- printMemLabel(pw, printedMem != imem ? imem : STATE_NOTHING);
+ printMemLabel(pw, printedMem != imem ? imem : STATE_NOTHING, '/');
printedMem = imem;
}
pw.print(STATE_NAMES[procStates[ip]]); pw.print(": ");
new int[] {STATE_SERVICE_RESTARTING}, now, totalTime, true);
dumpProcessSummaryDetails(pw, proc, prefix, " Receiver: ", screenStates, memStates,
new int[] {STATE_RECEIVER}, now, totalTime, true);
- dumpProcessSummaryDetails(pw, proc, prefix, " Home: ", screenStates, memStates,
+ dumpProcessSummaryDetails(pw, proc, prefix, " (Home): ", screenStates, memStates,
new int[] {STATE_HOME}, now, totalTime, true);
dumpProcessSummaryDetails(pw, proc, prefix, " (Last Act): ", screenStates, memStates,
new int[] {STATE_LAST_ACTIVITY}, now, totalTime, true);
pw.print(" pkg="); pw.println(proc.mCommonProcess.mPackage);
}
}
- pw.print(prefix); pw.print("mActive="); pw.println(proc.mActive);
+ if (proc.mActive) {
+ pw.print(prefix); pw.print("mActive="); pw.println(proc.mActive);
+ }
if (proc.mDead) {
pw.print(prefix); pw.print("mDead="); pw.println(proc.mDead);
}
- pw.print(prefix); pw.print("mNumActiveServices="); pw.print(proc.mNumActiveServices);
- pw.print(" mNumStartedServices=");
- pw.println(proc.mNumStartedServices);
+ if (proc.mNumActiveServices != 0 || proc.mNumStartedServices != 0) {
+ pw.print(prefix); pw.print("mNumActiveServices="); pw.print(proc.mNumActiveServices);
+ pw.print(" mNumStartedServices=");
+ pw.println(proc.mNumStartedServices);
+ }
}
public void dumpLocked(PrintWriter pw, String reqPackage, long now, boolean dumpSummary,
printScreenLabel(pw, printedScreen != iscreen
? iscreen : STATE_NOTHING);
printedScreen = iscreen;
- printMemLabel(pw, printedMem != imem ? imem : STATE_NOTHING);
+ printMemLabel(pw, printedMem != imem ? imem : STATE_NOTHING, (char)0);
printedMem = imem;
+ pw.print(": ");
TimeUtils.formatDuration(time, pw); pw.println(running);
}
totalTime += time;
}
if (totalTime != 0 && pw != null) {
pw.print(prefix);
- printScreenLabel(pw, STATE_NOTHING);
- pw.print("TOTAL: ");
+ pw.print(" TOTAL: ");
TimeUtils.formatDuration(totalTime, pw);
pw.println();
}
} else {
mAlwaysUseOption = false;
}
- }
- final int initialHighlight = mAdapter.getInitialHighlight();
- if (initialHighlight >= 0) {
- mListView.setItemChecked(initialHighlight, true);
- onItemClick(null, null, initialHighlight, 0); // Other entries are not used
+ // Set the initial highlight if there was a preferred or last used choice
+ final int initialHighlight = mAdapter.getInitialHighlight();
+ if (initialHighlight >= 0) {
+ mListView.setItemChecked(initialHighlight, true);
+ onItemClick(null, null, initialHighlight, 0); // Other entries are not used
+ }
}
}
<!-- Must be required by a {@link android.nfc.cardemulation.HostApduService}
or {@link android.nfc.cardemulation.OffHostApduService} to ensure that only
- the system can bind to it.
- @hide -->
+ the system can bind to it. -->
<permission android:name="android.permission.BIND_NFC_SERVICE"
android:label="@string/permlab_bindNfcService"
android:description="@string/permdesc_bindNfcService"
<item quantity="other" msgid="4730868920742952817">"Probeer weer oor <xliff:g id="COUNT">%d</xliff:g> sekondes"</item>
</plurals>
<string name="restr_pin_try_later" msgid="973144472490532377">"Probeer later weer"</string>
- <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Sleep van bo af na onder om volskerm te verlaat."</string>
+ <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Swiep van bo af na onder om volskerm te verlaat."</string>
</resources>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"ኤስ ኤም ኤስህን፣ ኢሜይልህን እና ሌላ መልዕክቶችህን አንብብና ፃፍ።"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"የግል መረጃዎ"</string>
<string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"በእውቂያ ካርድህ ላይ ወደተከማቸ የአንተ መረጃ ቀጥተኛ መዳረሻ።"</string>
- <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"á\88\9bá\88\85á\89 á\88«á\8b\8a á\88\98á\88¨á\8c\83á\88\85"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"á\88\9bá\88\85á\89 á\88«á\8b\8a á\88\98á\88¨á\8c\83á\8b\8e"</string>
<string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"ወደ የእውቂያዎችህና የማህበራዊ ግንኙነቶችህ መረጃ ቀጥተኛ መዳረሻ።"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"ስፍራዎ"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"ያለህበትን አካባቢ ተቆጣጠር።"</string>
<string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የጡባዊተኮህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።"</string>
<string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የስልክህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።"</string>
<string name="permlab_readProfile" msgid="4701889852612716678">"የራስህን የእውቂያ ካርድ አንብብ"</string>
- <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"á\88\98á\89°á\8c\8dá\89 á\88ªá\8b«á\8b\8d á\88\8dá\8a á\8a¥á\8a\95á\8b° á\88µá\88\9dá\88\85 á\8a¥á\8a\93 á\8b¨á\8a¥á\8b\8dá\89\82á\8b« á\88\98á\88¨á\8c\83á\88\85 á\8b«á\88\89 á\89 á\88\98á\88³á\88ªá\8b«á\88\85 á\88\8bá\8b á\8b¨á\89°á\8a¨á\88\9bá\89¹ á\8b¨á\8c\8dá\88\8d á\88\98á\8c\88á\88\88á\8c« á\88\98á\88¨á\8c\83á\8b\8eá\89½á\8a\95 á\8a¥á\8a\95á\8b²á\8b«á\8a\90á\89¥ á\8bá\8d\88á\89\85á\8bµá\88\88á\89³á\88\8dá\8d¢ á\8bá\88\85á\88\9d á\88\9bá\88\88á\89µ á\88\98á\89°á\8c\8dá\89 á\88ªá\8b«á\8b\8d á\88\88á\8bá\89¶ á\88\8aá\8b«á\8b\8dá\89\85á\88\85 á\8a¥á\8a\93 á\8b¨á\88\98á\8c\88á\88\88á\8c« á\88\98á\88¨á\8c\83á\88\85ን ለሌሎች ሊልክ ይችላል።"</string>
+ <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"á\88\98á\89°á\8c\8dá\89 á\88ªá\8b«á\8b\8d á\88\8dá\8a á\8a¥á\8a\95á\8b° á\88µá\88\9dá\8b\8e á\8a¥á\8a\93 á\8b¨á\8a¥á\8b\8dá\89\82á\8b« á\88\98á\88¨á\8c\83á\8b\8e á\8b«á\88\89 á\89 á\88\98á\88³á\88ªá\8b«á\8b\8e á\88\8bá\8b á\8b¨á\89°á\8a¨á\88\9bá\89¹ á\8b¨á\8c\8dá\88\8d á\88\98á\8c\88á\88\88á\8c« á\88\98á\88¨á\8c\83á\8b\8eá\89½á\8a\95 á\8a¥á\8a\95á\8b²á\8b«á\8a\90á\89¥ á\8bá\8d\88á\89\85á\8bµá\88\88á\89³á\88\8dá\8d¢ á\8bá\88\85á\88\9d á\88\9bá\88\88á\89µ á\88\98á\89°á\8c\8dá\89 á\88ªá\8b«á\8b\8d á\88\88á\8bá\89¶ á\88\8aá\8b«á\8b\8dá\89\81á\8b\8e á\8a¥á\8a\93 á\8b¨á\88\98á\8c\88á\88\88á\8c« á\88\98á\88¨á\8c\83á\8b\8eን ለሌሎች ሊልክ ይችላል።"</string>
<string name="permlab_writeProfile" msgid="907793628777397643">"የራስህን የዕውቂያ ካርድ አስተካክል"</string>
- <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"á\88\98á\89°á\8c\8dá\89 á\88ªá\8b«á\8b\8d á\88\8dá\8a á\8a¥á\8a\95á\8b° á\88µá\88\9dá\88\85 á\8a¥á\8a\93 á\8b¨á\8a¥á\8b\8dá\89\82á\8b« á\88\98á\88¨á\8c\83á\88\85 á\8b«á\88\89 á\89 á\88\98á\88³á\88ªá\8b«á\88\85 á\88\8bá\8b á\8b¨á\89°á\8a¨á\88\9bá\89¹ á\8b¨á\8c\8dá\88\8d á\88\98á\8c\88á\88\88á\8c« á\88\98á\88¨á\8c\83á\8b\8eá\89½á\8a\95 á\8a¥á\8a\95á\8b²á\89\80á\8bá\88 á\8b\88á\8bá\88\9d á\8a¥á\8a\95á\8b²á\8b«á\8aá\88\8dá\89£á\89¸á\8b\8d á\8bá\8d\88á\89\85á\8bµá\88\88á\89³á\88\8dá\8d¢ á\8bá\88\85á\88\9d á\88\9bá\88\88á\89µ á\88\98á\89°á\8c\8dá\89 á\88ªá\8b«á\8b\8d á\88\88á\8bá\89¶ á\88\8aá\8b«á\8b\8dá\89\85á\88\85 á\8a¥á\8a\93 á\8b¨á\88\98á\8c\88á\88\88á\8c« á\88\98á\88¨á\8c\83á\88\85ን ለሌሎች ሊልክ ይችላል።"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"á\88\98á\89°á\8c\8dá\89 á\88ªá\8b«á\8b\8d á\88\8dá\8a á\8a¥á\8a\95á\8b° á\88µá\88\9dá\8b\8e á\8a¥á\8a\93 á\8b¨á\8a¥á\8b\8dá\89\82á\8b« á\88\98á\88¨á\8c\83á\8b\8e á\8b«á\88\89 á\89 á\88\98á\88³á\88ªá\8b«á\8b\8e á\88\8bá\8b á\8b¨á\89°á\8a¨á\88\9bá\89¹ á\8b¨á\8c\8dá\88\8d á\88\98á\8c\88á\88\88á\8c« á\88\98á\88¨á\8c\83á\8b\8eá\89½á\8a\95 á\8a¥á\8a\95á\8b²á\89\80á\8bá\88 á\8b\88á\8bá\88\9d á\8a¥á\8a\95á\8b²á\8b«á\8aá\88\8dá\89£á\89¸á\8b\8d á\8bá\8d\88á\89\85á\8bµá\88\88á\89³á\88\8dá\8d¢ á\8bá\88\85á\88\9d á\88\9bá\88\88á\89µ á\88\98á\89°á\8c\8dá\89 á\88ªá\8b«á\8b\8d á\88\88á\8bá\89¶ á\88\8aá\8b«á\8b\8dá\89\85á\8b\8e á\8a¥á\8a\93 á\8b¨á\88\98á\8c\88á\88\88á\8c« á\88\98á\88¨á\8c\83á\8b\8eን ለሌሎች ሊልክ ይችላል።"</string>
<string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"የአንተን ማህበራዊ የውይይት ክፍሎች አንብብ"</string>
<string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"መተግበሪያው የአንተንና የጓኞችህን ማህበራዊ ዝማኔዎችን እንዲደርስባቸው እና እንዲያመሳስላቸው ይፈቅድለታል። መረጃ ስታጋራ ተጠንቀቅ -- ይህ መተግበሪያው ሚስጥራዊነትን ከግምት ሳያስገባ በማህበራዊ አውታረ መረቦች በአንተ እና በጓደኞችህ መካከል የሚደረጉ ግንኙነቶችን እንዲያነብ ይፈቅድለታል። ማስታወሻ፦ ይህ ፈቃድ ለሁሉም ማህበራዊ አውታር መረቦች ላይ ላይፈጸም ይችላል።"</string>
<string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"ወደ የአንተ ማህበራዊ የውይይት ክፍሎች ጻፍ"</string>
<string name="serviceErased" msgid="1288584695297200972">"لم يتم المسح بنجاح."</string>
<string name="passwordIncorrect" msgid="7612208839450128715">"كلمة مرور غير صحيحة."</string>
<string name="mmiComplete" msgid="8232527495411698359">"اكتمل MMI."</string>
- <string name="badPin" msgid="9015277645546710014">"رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a القديم الذي كتبته غير صحيح."</string>
+ <string name="badPin" msgid="9015277645546710014">"رÙ\85ز PIN القديم الذي كتبته غير صحيح."</string>
<string name="badPuk" msgid="5487257647081132201">"رمز PUK الذي كتبته غير صحيح."</string>
<string name="mismatchPin" msgid="609379054496863419">"أرقام التعريف الشخصية التي كتبتها غير مطابقة."</string>
<string name="invalidPin" msgid="3850018445187475377">"اكتب رقم تعريف شخصيًا مكونًا من 4 إلى ثمانية أعداد."</string>
<string name="meid" msgid="4841221237681254195">"MEID"</string>
<string name="ClipMmi" msgid="6952821216480289285">"معرف المتصل الوارد"</string>
<string name="ClirMmi" msgid="7784673673446833091">"معرف المتصل الصادر"</string>
- <string name="CfMmi" msgid="5123218989141573515">"إعادة تÙ\88جÙ\8aÙ\87 اÙ\84اتصاÙ\84"</string>
+ <string name="CfMmi" msgid="5123218989141573515">"اعادة تÙ\88جÙ\8aÙ\87 اÙ\84Ù\85Ù\83اÙ\84Ù\85Ø©"</string>
<string name="CwMmi" msgid="9129678056795016867">"انتظار المكالمة"</string>
<string name="BaMmi" msgid="455193067926770581">"حظر الاتصال"</string>
<string name="PwdMmi" msgid="7043715687905254199">"تغيير كلمة المرور"</string>
- <string name="PinMmi" msgid="3113117780361190304">"تغÙ\8aÙ\8aر رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a"</string>
+ <string name="PinMmi" msgid="3113117780361190304">"تغÙ\8aÙ\8aر رÙ\85ز PIN"</string>
<string name="CnipMmi" msgid="3110534680557857162">"رقم الاتصال موجود"</string>
<string name="CnirMmi" msgid="3062102121430548731">"رقم الاتصال مقيّد"</string>
<string name="ThreeWCMmi" msgid="9051047170321190368">"اتصال ثلاثي"</string>
<string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"تلقي بث الطوارئ"</string>
<string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"للسماح للتطبيق بتلقي رسائل بث الطوارئ ومعالجتها. لا يتوفر هذا الإذن سوى لتطبيقات النظام."</string>
<string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"قراءة رسائل بث الخلية"</string>
- <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"اÙ\84سÙ\85Ø§Ø Ù\84Ù\84تطبÙ\8aÙ\82 بÙ\82راءة رسائÙ\84 بث اÙ\84Ø®Ù\84Ù\8aØ© اÙ\84تÙ\8a Ù\8aتÙ\84Ù\82اÙ\87ا Ù\87ذا اÙ\84جÙ\87از. Ù\8aتÙ\85 تسÙ\84Ù\8aÙ\85 تÙ\86بÙ\8aÙ\87ات بث الخلية في بعض المواقع لتحذيرك من حالات طارئة. يمكن أن تتداخل التطبيقات الضارة مع أداء أو تشغيل الجهاز عندما يتم تلقي بث خلية طارئ."</string>
+ <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"اÙ\84سÙ\85Ø§Ø Ù\84Ù\84تطبÙ\8aÙ\82 بÙ\82راءة رسائÙ\84 بث اÙ\84Ø®Ù\84Ù\8aØ© اÙ\84تÙ\8a Ù\8aتÙ\84Ù\82اÙ\87ا Ù\87ذا اÙ\84جÙ\87از. Ù\8aتÙ\85 تسÙ\84Ù\8aÙ\85 اشعارات بث الخلية في بعض المواقع لتحذيرك من حالات طارئة. يمكن أن تتداخل التطبيقات الضارة مع أداء أو تشغيل الجهاز عندما يتم تلقي بث خلية طارئ."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"إرسال رسائل قصيرة SMS"</string>
<string name="permdesc_sendSms" msgid="7094729298204937667">"للسماح للتطبيق بإرسال رسائل قصيرة SMS. وقد يؤدي هذا إلى تحمل رسوم غير متوقعة. وقد تكلفك التطبيقات الضارة أموالاً من خلال إرسال رسائل بدون موافقة منك."</string>
<string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"إرسال أحداث يتم الرد عليها عبر رسالة"</string>
<string name="sipAddressTypeHome" msgid="6093598181069359295">"المنزل"</string>
<string name="sipAddressTypeWork" msgid="6920725730797099047">"العمل"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"غير ذلك"</string>
- <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"اÙ\83تب رÙ\85ز رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a"</string>
- <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"اÙ\83تب رÙ\85ز PUK Ù\88رÙ\85ز رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a الجديد"</string>
+ <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"اÙ\83تب رÙ\85ز رÙ\85ز PIN"</string>
+ <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"اÙ\83تب رÙ\85ز PUK Ù\88رÙ\85ز رÙ\85ز PIN الجديد"</string>
<string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"رمز PUK"</string>
- <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"رÙ\85ز رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a الجديد"</string>
+ <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"رÙ\85ز رÙ\85ز 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">"اÙ\83تب رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a لإلغاء التأمين"</string>
- <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a غير صحيح."</string>
+ <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"اÙ\83تب رÙ\85ز PIN لإلغاء التأمين"</string>
+ <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"رÙ\85ز 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>
<string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"جارٍ إلغاء تأمين بطاقة SIM…"</string>
<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">"Ù\84Ù\82د Ù\83تبت رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a <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">"Ù\84Ù\82د Ù\83تبت رÙ\85ز 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> مرة. بعد <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> مرة. بعد <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">"لقد حاولت إلغاء تأمين الجهاز اللوحي <xliff:g id="NUMBER_0">%d</xliff:g> من المرات. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة، ستتم إعادة تعيين الجهاز اللوحي إلى الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
<string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"إلغاء القفل باستخدام التمرير."</string>
<string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"إلغاء القفل باستخدام النقش."</string>
<string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"تأمين الجهاز بالوجه."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ø¥Ù\84غاء اÙ\84Ù\82Ù\81Ù\84 باستخداÙ\85 رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a."</string>
+ <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ø¥Ù\84غاء اÙ\84Ù\82Ù\81Ù\84 باستخداÙ\85 رÙ\85ز PIN."</string>
<string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"إلغاء القفل باستخدام كلمة المرور."</string>
<string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"منطقة النقش."</string>
<string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"منطقة التمرير."</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">"اÙ\83تب رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a المطلوب:"</string>
- <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a:"</string>
+ <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"اÙ\83تب رÙ\85ز PIN المطلوب:"</string>
+ <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"رÙ\85ز PIN:"</string>
<string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"سيتم قطع اتصال الجهاز اللوحي مؤقتًا بشبكة Wi-Fi في الوقت الذي يكون فيه متصلاً بـ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"سيتم قطع اتصال الهاتف مؤقتًا بشبكة Wi-Fi في الوقت الذي يكون فيه متصلاً بـ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="select_character" msgid="3365550120617701745">"إدراج حرف"</string>
<string name="kg_wrong_pin" msgid="1131306510833563801">"رقم تعريف شخصي خاطئ"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"حاول مرة أخرى خلال <xliff:g id="NUMBER">%1$d</xliff:g> ثانية."</string>
<string name="kg_pattern_instructions" msgid="398978611683075868">"ارسم نقشك"</string>
- <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"أدخÙ\84 رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a لبطاقة SIM"</string>
- <string name="kg_pin_instructions" msgid="2377242233495111557">"أدخÙ\84 رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a"</string>
+ <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"أدخÙ\84 رÙ\85ز PIN لبطاقة SIM"</string>
+ <string name="kg_pin_instructions" msgid="2377242233495111557">"أدخÙ\84 رÙ\85ز PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"أدخل كلمة المرور"</string>
<string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"بطاقة SIM معطلة الآن. أدخل رمز PUK للمتابعة. اتصل بمشغل شبكة الجوال للاطلاع على التفاصيل."</string>
- <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"إدخاÙ\84 رÙ\85ز رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a المراد"</string>
- <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"تأÙ\83Ù\8aد رÙ\85ز رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a المراد"</string>
+ <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"إدخاÙ\84 رÙ\85ز رÙ\85ز PIN المراد"</string>
+ <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"تأÙ\83Ù\8aد رÙ\85ز رÙ\85ز PIN المراد"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"جارٍ إلغاء تأمين بطاقة SIM…"</string>
- <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a غير صحيح."</string>
- <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"اÙ\83تب رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a المكون من 4 إلى 8 أرقام."</string>
+ <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"رÙ\85ز PIN غير صحيح."</string>
+ <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"اÙ\83تب رÙ\85ز PIN المكون من 4 إلى 8 أرقام."</string>
<string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"يجب أن يتضمن رمز PUK 8 أرقام أو أكثر."</string>
<string name="kg_invalid_puk" msgid="3638289409676051243">"أعد إدخال رمز PUK الصحيح. وستؤدي المحاولات المتكررة إلى تعطيل بطاقة SIM نهائيًا."</string>
- <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Ù\84ا Ù\8aتطابÙ\82 رÙ\85زا رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a"</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Ù\84ا Ù\8aتطابÙ\82 رÙ\85زا رÙ\85ز PIN"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"محاولات النقش كثيرة جدًا"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"لإلغاء التأمين، سجّل الدخول بحسابك في Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"اسم المستخدم (البريد إلكتروني)"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"اسم مستخدم غير صحيح أو كلمة مرور غير صالحة."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"هل نسيت اسم المستخدم أو كلمة المرور؟\nانتقل إلى "<b>"google.com/accounts/recovery"</b>"."</string>
<string name="kg_login_checking_password" msgid="1052685197710252395">"جارٍ فحص الحساب…"</string>
- <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Ù\84Ù\82د Ù\83تبت رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
+ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Ù\84Ù\82د Ù\83تبت رÙ\85ز PIN بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"لقد كتبت كلمة المرور بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"لقد رسمت نقش إلغاء التأمين بطريقة غير صحيحة <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"لقد حاولت إلغاء تأمين الجهاز اللوحي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستتم إعادة تعيين الجهاز اللوحي على الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
<string name="reason_service_unavailable" msgid="7824008732243903268">"خدمة الطباعة ليست ممكّنة"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"تم تثبيت خدمة <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"انقر للتمكين."</string>
- <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"أدخÙ\84 رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a للمشرف"</string>
- <string name="restr_pin_enter_pin" msgid="3395953421368476103">"إدخاÙ\84 رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"أدخÙ\84 رÙ\85ز PIN للمشرف"</string>
+ <string name="restr_pin_enter_pin" msgid="3395953421368476103">"إدخاÙ\84 رÙ\85ز PIN"</string>
<string name="restr_pin_incorrect" msgid="8571512003955077924">"غير صحيح"</string>
- <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a الحالي"</string>
- <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a الجديد"</string>
- <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"تأÙ\83Ù\8aد رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a الجديد"</string>
+ <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"رÙ\85ز PIN الحالي"</string>
+ <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"رÙ\85ز PIN الجديد"</string>
+ <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"تأÙ\83Ù\8aد رÙ\85ز PIN الجديد"</string>
<string name="restr_pin_create_pin" msgid="8017600000263450337">"إنشاء رقم تعريف شخصي لتعديل القيود"</string>
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"أرقام التعريف الشخصية لا تتطابق، أعد المحاولة."</string>
- <string name="restr_pin_error_too_short" msgid="8173982756265777792">"رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a أقصر مما يلزم، يجب ألا يقل عن 4 أرقام. "</string>
+ <string name="restr_pin_error_too_short" msgid="8173982756265777792">"رÙ\85ز PIN أقصر مما يلزم، يجب ألا يقل عن 4 أرقام. "</string>
<plurals name="restr_pin_countdown">
<item quantity="one" msgid="311050995198548675">"أعد المحاولة خلال ثانية واحدة."</item>
<item quantity="other" msgid="4730868920742952817">"أعد المحاولة خلال <xliff:g id="COUNT">%d</xliff:g> ثانية"</item>
<string name="wireless_display_route_description" msgid="9070346425023979651">"Pantalla sense fil"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fet"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Sortida de contingut multimèdia"</string>
- <string name="media_route_status_scanning" msgid="7279908761758293783">"S\'està explorant..."</string>
+ <string name="media_route_status_scanning" msgid="7279908761758293783">"S\'està cercant…"</string>
<string name="media_route_status_connecting" msgid="6422571716007825440">"S\'està connectant..."</string>
<string name="media_route_status_available" msgid="6983258067194649391">"Disponible"</string>
<string name="media_route_status_not_available" msgid="6739899962681886401">"No disponible"</string>
<string name="permlab_readContacts" msgid="8348481131899886131">"læse dine kontaktpersoner"</string>
<string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Tillader, at appen kan læse data om de kontaktpersoner, der er gemt på din tablet, f.eks. hvor ofte du har ringet til, sendt e-mail til eller på anden måde kommunikeret med bestemte personer. Med denne tilladelse kan apps gemme dine kontaktdata, og skadelige apps kan dele kontaktdata uden din viden."</string>
<string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Tillader, at appen kan læse data om de kontaktpersoner, der er gemt på din telefon, f.eks. hvor ofte du har ringet til, sendt e-mail til eller på anden måde kommunikeret med bestemte personer. Med denne tilladelse kan apps gemme dine kontaktdata, og skadelige apps kan dele kontaktdata uden din viden."</string>
- <string name="permlab_writeContacts" msgid="5107492086416793544">"ændre dine kontaktpersoner"</string>
+ <string name="permlab_writeContacts" msgid="5107492086416793544">"at ændre dine kontaktpersoner"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Tillader, at appen kan ændre data om de kontaktpersoner, der er gemt på din tablet, f.eks. hvor ofte du har ringet til dem, sendt dem en e-mail eller på anden måde kommunikeret med bestemte kontaktpersoner. Med denne tilladelse kan apps slette kontaktoplysninger."</string>
<string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"Tillader, at appen kan ændre data om de kontaktpersoner, der er gemt på din telefon, f.eks. hvor ofte du har ringet til dem, sendt en e-mail til dem eller på anden måde kommunikeret med bestemte kontaktpersoner. Med denne tilladelse kan apps slette kontaktoplysninger."</string>
<string name="permlab_readCallLog" msgid="3478133184624102739">"læs opkaldsliste"</string>
<item quantity="other" msgid="4730868920742952817">"Yritä uud. <xliff:g id="COUNT">%d</xliff:g> s kul."</item>
</plurals>
<string name="restr_pin_try_later" msgid="973144472490532377">"Yritä myöhemmin uudelleen"</string>
- <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Poistu koko näytön tilasta liu\'uttamalla alas."</string>
+ <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Poistu koko näytön tilasta pyyhkäisemällä alas."</string>
</resources>
<item quantity="other" msgid="4730868920742952817">"Próbálja újra <xliff:g id="COUNT">%d</xliff:g> másodperc múlva"</item>
</plurals>
<string name="restr_pin_try_later" msgid="973144472490532377">"Próbálkozzon később"</string>
- <string name="immersive_mode_confirmation" msgid="7227416894979047467">"A teljes képernyős nézetből való kilépéshez húzza ujját a tetejétől lefelé."</string>
+ <string name="immersive_mode_confirmation" msgid="7227416894979047467">"A teljes képernyős nézetből való kilépéshez húzza ujját a képernyő tetejétől lefelé."</string>
</resources>
<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">"à»\80ຮັàº\94ວຽàº\81à»\83ຫà»\89ສຳà»\80ລັàº\94ໂດຍໃຊ້"</string>
+ <string name="whichApplication" msgid="4533185947064773386">"àº\94ຳà»\80àº\99ີàº\99àº\81າàº\99ໂດຍໃຊ້"</string>
<string name="whichHomeApplication" msgid="4616420172727326782">"ເລືອກແອັບຯ Home"</string>
<string name="alwaysUse" msgid="4583018368000610438">"ໃຊ້ໂດຍຄ່າເລີ່ມຕົນສຳລັບການເຮັດວຽກນີ້."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"ລຶບລ້າງຄ່າເລີ່ມຕົ້ນ ໃນ ການຕັ້ງຄ່າລະບົບ > ແອັບຯ > ດາວໂຫລດແລ້ວ."</string>
<item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> секундын дараа дахин оролдоно уу"</item>
</plurals>
<string name="restr_pin_try_later" msgid="973144472490532377">"Дараа дахин оролдоно уу"</string>
- <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Бүтэн дэлгэцээс гарахын тулд дээрээс нь эхлэн доош шудрана уу."</string>
+ <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Бүтэн дэлгэцээс гарахын тулд дээрээс нь доош шудрана уу."</string>
</resources>
<item quantity="other" msgid="4730868920742952817">"Jaribu tena baada ya sekunde <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
<string name="restr_pin_try_later" msgid="973144472490532377">"Jaribu tena baadaye"</string>
- <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Telezesha kidole kwa kasi chini kuanzia juu ili uondoke kwenye skrini kamili."</string>
+ <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Telezesha kidole kwa kasi chini kuanzia juu ili uondoke kwenye skrini zima."</string>
</resources>
<item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> 秒後再試一次"</item>
</plurals>
<string name="restr_pin_try_later" msgid="973144472490532377">"稍後再試"</string>
- <string name="immersive_mode_confirmation" msgid="7227416894979047467">"從頂端往下快速滑動即可退出全螢幕。"</string>
+ <string name="immersive_mode_confirmation" msgid="7227416894979047467">"由頂端往下快速滑動即可離開全螢幕。"</string>
</resources>
<item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> 秒後再試一次"</item>
</plurals>
<string name="restr_pin_try_later" msgid="973144472490532377">"稍後再試"</string>
- <string name="immersive_mode_confirmation" msgid="7227416894979047467">"從頂端往下滑動即可結束全螢幕。"</string>
+ <string name="immersive_mode_confirmation" msgid="7227416894979047467">"從頂端往下滑動即可退出全螢幕模式。"</string>
</resources>
<item type="id" name="popup_submenu_presenter" />
<item type="id" name="action_bar_spinner" />
<item type="id" name="current_scene" />
+ <item type="id" name="scene_layoutid_cache" />
</resources>
<java-symbol type="id" name="clearDefaultHint" />
<java-symbol type="id" name="contentPanel" />
<java-symbol type="id" name="current_scene" />
+ <java-symbol type="id" name="scene_layoutid_cache" />
<java-symbol type="id" name="customPanel" />
<java-symbol type="id" name="datePicker" />
<java-symbol type="id" name="day" />
--- /dev/null
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+LOCAL_PACKAGE_NAME := version_1_nosys
+LOCAL_AAPT_FLAGS := --version-code 1 --version-name 1.0
+LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test
+include $(FrameworkCoreTests_BUILD_PACKAGE)
+
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.frameworks.coretests.version_test">
+
+ <!-- Do not ask for this system permission -->
+<!-- <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
+-->
+ <!-- Which permission it uses is not important as long as it's a normal
+ permission -->
+ <uses-permission android:name="android.permission.VIBRATE" />
+
+ <application android:hasCode="false"/>
+</manifest>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Just need this dummy file to have something to build. -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="dummy">dummy</string>
+</resources>
--- /dev/null
+package com.android.frameworks.coretests.version_test;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+
+public class NullProvider extends ContentProvider {
+ @Override
+ public boolean onCreate() {
+ return true;
+ }
+
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+ String sortOrder) {
+ return null;
+ }
+
+ @Override
+ public Uri insert(Uri uri, ContentValues values) {
+ return null;
+ }
+
+ @Override
+ public int delete(Uri uri, String selection, String[] selectionArgs) {
+ return 0;
+ }
+
+ @Override
+ public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+ return 0;
+ }
+
+ @Override
+ public String getType(Uri uri) {
+ return "text/plain";
+ }
+}
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"اÙ\83تب رÙ\85ز رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a"</string>
- <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"اÙ\83تب رÙ\85ز PUK Ù\88رÙ\85ز رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a الجديد"</string>
+ <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"اÙ\83تب رÙ\85ز رÙ\85ز PIN"</string>
+ <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"اÙ\83تب رÙ\85ز PUK Ù\88رÙ\85ز رÙ\85ز PIN الجديد"</string>
<string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"رمز PUK"</string>
- <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"رÙ\85ز رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a الجديد"</string>
+ <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"رÙ\85ز رÙ\85ز 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">"اÙ\83تب رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a لإلغاء التأمين"</string>
- <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a غير صحيح."</string>
+ <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"اÙ\83تب رÙ\85ز PIN لإلغاء التأمين"</string>
+ <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"رÙ\85ز PIN غير صحيح."</string>
<string name="keyguard_label_text" msgid="861796461028298424">"لإلغاء التأمين، اضغط على \"القائمة\" ثم على 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"تم تجاوز الحد الأقصى لعدد محاولات تأمين الجهاز بالوجه"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"تم الشحن"</string>
<string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"إلغاء القفل باستخدام التمرير."</string>
<string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"إلغاء القفل باستخدام النقش."</string>
<string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"تأمين الجهاز بالوجه."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ø¥Ù\84غاء اÙ\84Ù\82Ù\81Ù\84 باستخداÙ\85 رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a."</string>
+ <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ø¥Ù\84غاء اÙ\84Ù\82Ù\81Ù\84 باستخداÙ\85 رÙ\85ز PIN."</string>
<string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"إلغاء القفل باستخدام كلمة المرور."</string>
<string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"منطقة النقش."</string>
<string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"منطقة التمرير."</string>
<string name="kg_wrong_pin" msgid="1131306510833563801">"رقم تعريف شخصي خاطئ"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"حاول مرة أخرى خلال <xliff:g id="NUMBER">%d</xliff:g> ثانية."</string>
<string name="kg_pattern_instructions" msgid="398978611683075868">"ارسم نقشك"</string>
- <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"أدخÙ\84 رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a لبطاقة SIM"</string>
- <string name="kg_pin_instructions" msgid="2377242233495111557">"أدخÙ\84 رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a"</string>
+ <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"أدخÙ\84 رÙ\85ز PIN لبطاقة SIM"</string>
+ <string name="kg_pin_instructions" msgid="2377242233495111557">"أدخÙ\84 رÙ\85ز PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"أدخل كلمة المرور"</string>
<string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"بطاقة SIM معطلة الآن. أدخل رمز PUK للمتابعة. اتصل بمشغل شبكة الجوال للاطلاع على التفاصيل."</string>
- <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"إدخاÙ\84 رÙ\85ز رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a المراد"</string>
- <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"تأÙ\83Ù\8aد رÙ\85ز رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a المراد"</string>
+ <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"إدخاÙ\84 رÙ\85ز رÙ\85ز PIN المراد"</string>
+ <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"تأÙ\83Ù\8aد رÙ\85ز رÙ\85ز PIN المراد"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"جارٍ إلغاء تأمين بطاقة SIM…"</string>
- <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a غير صحيح."</string>
- <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"اÙ\83تب رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a المكون من 4 إلى 8 أرقام."</string>
+ <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"رÙ\85ز PIN غير صحيح."</string>
+ <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"اÙ\83تب رÙ\85ز PIN المكون من 4 إلى 8 أرقام."</string>
<string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"يجب أن يتضمن رمز PUK 8 أرقام أو أكثر."</string>
<string name="kg_invalid_puk" msgid="3638289409676051243">"أعد إدخال رمز PUK الصحيح. وستؤدي المحاولات المتكررة إلى تعطيل بطاقة SIM نهائيًا."</string>
- <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Ù\84ا Ù\8aتطابÙ\82 رÙ\85زا رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a"</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Ù\84ا Ù\8aتطابÙ\82 رÙ\85زا رÙ\85ز PIN"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"محاولات النقش كثيرة جدًا"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"لإلغاء التأمين، سجّل الدخول بحسابك في Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"اسم المستخدم (البريد إلكتروني)"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"اسم مستخدم غير صحيح أو كلمة مرور غير صالحة."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"هل نسيت اسم المستخدم أو كلمة المرور؟\nانتقل إلى "<b>"google.com/accounts/recovery"</b>"."</string>
<string name="kg_login_checking_password" msgid="1052685197710252395">"جارٍ فحص الحساب…"</string>
- <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Ù\84Ù\82د Ù\83تبت رÙ\82Ù\85 اÙ\84تعرÙ\8aÙ\81 اÙ\84شخصÙ\8a بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
+ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Ù\84Ù\82د Ù\83تبت رÙ\85ز PIN بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"لقد كتبت كلمة المرور بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"لقد رسمت نقش إلغاء التأمين بطريقة غير صحيحة <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"لقد حاولت إلغاء تأمين الجهاز اللوحي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستتم إعادة تعيين الجهاز اللوحي على الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
protected static final boolean DEBUG = false;
protected static final String TAG = "TransportControlView";
- private static final boolean ANIMATE_TRANSITIONS = false;
+ private static final boolean ANIMATE_TRANSITIONS = true;
private ViewGroup mMetadataContainer;
private ViewGroup mInfoContainer;
<string name="no_connection_to_printer" msgid="2159246915977282728">"Geen verbinding met drukker nie"</string>
<string name="reason_unknown" msgid="5507940196503246139">"onbekend"</string>
<string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – nie beskikbaar nie"</string>
- <string name="print_error_default_message" msgid="8568506918983980567">"Kon nie druktaak genereer nie"</string>
+ <string name="print_error_default_message" msgid="8568506918983980567">"Kon nie uitdruktaak genereer nie"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Swart en wit"</item>
<item msgid="2762241247228983754">"Kleur"</item>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Nav savienojuma ar printeri"</string>
<string name="reason_unknown" msgid="5507940196503246139">"nezināms"</string>
<string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> — nav pieejams"</string>
- <string name="print_error_default_message" msgid="8568506918983980567">"Nevar ģenerēt drukas darbu"</string>
+ <string name="print_error_default_message" msgid="8568506918983980567">"Nevarēja ģenerēt drukas darbu"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Melnbalts"</item>
<item msgid="2762241247228983754">"Krāsa"</item>
<string name="label_color" msgid="1108690305218188969">"顏色"</string>
<string name="label_orientation" msgid="2853142581990496477">"方向"</string>
<string name="label_pages" msgid="6300874667546617333">"頁數 (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
- <string name="pages_range_example" msgid="8558694453556945172">"例如:1–5、8、11–13"</string>
+ <string name="pages_range_example" msgid="8558694453556945172">"例如:1-5,8,11-13"</string>
<string name="print_preview" msgid="8010217796057763343">"預覽列印"</string>
<string name="install_for_print_preview" msgid="6366303997385509332">"安裝預覽所需的 PDF 檢視器"</string>
<string name="printing_app_crashed" msgid="854477616686566398">"列印應用程式當機了"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Battery <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Vliegtuigmodus <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Wekker gestel vir <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data gedeaktiveer"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data gedeaktiveer"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ባትሪ <xliff:g id="STATE">%s</xliff:g>።"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"የአውሮፕላን ሁነታ <xliff:g id="STATE">%s</xliff:g>።"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"ብሉቱዝ <xliff:g id="STATE">%s</xliff:g>።"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"ማንቂያ ለ<xliff:g id="TIME">%s</xliff:g> ተዋቅሯል።"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G ውሂብ ቦዝኗል"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G ውሂብ ቦዝኗል"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"البطارية <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"وضع الطائرة <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"البلوتوث <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"تم ضبط المنبه على <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"تم تعطيل بيانات شبكات الجيل الثاني والجيل الثالث"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"تم تعطيل بيانات شبكة الجيل الرابع"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Акумулятар: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Рэжым палёту: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Наладжаны будзiльнiк: <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Дадзеныя 2G-3G адключаныя"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Дадзеныя 4G адключаныя"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Батерия: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Самолетен режим: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Будилникът е навит за <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G данните са деактивирани"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G данните са деактивирани"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateria <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mode d\'avió <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarma establerta a les <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dades 2G-3G desactivades"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dades 4G desactivades"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Baterie: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Režim V letadle: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Budík je nastaven na <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datové přenosy 2G a 3G jsou zakázány"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datové přenosy 4G jsou zakázány"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batteri <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Flytilstand <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarmen er indstillet til <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data er deaktiveret"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-data er deaktiveret"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Akku: <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Flugmodus: <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Wecker gestellt für <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-/3G-Daten deaktiviert"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-Daten deaktiviert"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Μπαταρία <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Λειτουργία πτήσης <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Το ξυπνητήρι έχει οριστεί στις <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Τα δεδομένα 2G-3G απενεργοποιήθηκαν"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Τα δεδομένα 4G απενεργοποιήθηκαν"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Battery <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Aeroplane Mode <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm set for <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G data disabled"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data disabled"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Battery <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Aeroplane Mode <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm set for <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G data disabled"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data disabled"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batería <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo avión <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarma: <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos de 2G-3G inhabilitados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datos de 4G inhabilitados"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batería <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo avión <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"La alarma sonará a la(s) <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos 2G-3G inhabilitados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datos 4G inhabilitados"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Aku: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Lennukirežiim: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Määratud äratus: <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G andmeside keelatud"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G andmeside keelatud"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"باتری <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"حالت هواپیما <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"بلوتوث <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"هشدار برای <xliff:g id="TIME">%s</xliff:g> تنظیم شد."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"داده 2G-3G غیرفعال شد"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"داده 4G غیر فعال شد"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Akku: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Lentokonetila <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Hälytys asetettu, aika: <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-tiedonsiirto pois käytöstä"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-tiedonsiirto pois käytöstä"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batterie : <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mode Avion : <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth : <xliff:g id="STATE">%s</xliff:g>"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarme réglée sur <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Données 2G-3G désactivées"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Données 4G désactivées"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batterie : <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mode Avion : <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth : <xliff:g id="STATE">%s</xliff:g>"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarme réglée sur <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Données 2G-3G désactivées"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Données 4G désactivées"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"बैटरी <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"हवाई जहाज़ मोड <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"<xliff:g id="TIME">%s</xliff:g> के लिए अलार्म सेट किया गया."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G डेटा अक्षम"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G डेटा अक्षम"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Baterija – <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Način rada u zrakoplovu <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth – <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Vrijeme alarma: <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Onemogućeni su 2G-3G podaci"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Onemogućeni su 4G podaci"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Akkumulátor <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Repülős üzemmód <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Ébresztés időpontja: <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G adatforgalom letiltva"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G adatforgalom letiltva"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Մարտկոցը <xliff:g id="STATE">%s</xliff:g> է:"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Ինքնաթիռային ռեժիմը <xliff:g id="STATE">%s</xliff:g> է:"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth-ը <xliff:g id="STATE">%s</xliff:g> է:"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Զարթուցիչը դրված է <xliff:g id="TIME">%s</xliff:g>-ին:"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G տվյալները անջատված են"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G տվյալները անջատված են"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Baterai <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mode Pesawat <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm disetel ke <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data 2G-3G dinonaktifkan"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data 4G dinonaktifkan"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batteria: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modalità aereo: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Allarme impostato per: <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dati 2G-3G disattivati"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dati 4G disattivati"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"סוללה <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"מצב טיסה <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"ההתראה נקבעה ל-<xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"נתוני 2G-3G מושבתים"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"נתוני 4G מושבתים"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"電池<xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"機内モード<xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"アラームは<xliff:g id="TIME">%s</xliff:g>に設定されています。"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G~3Gデータが無効になりました"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4Gデータが無効になりました"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ელემენტი: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"თვითმფრინავის რეჟიმი <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"მაღვიძარა დაყენებულია: <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G ინტერნეტი გაითიშა."</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G მონაცემები გათიშულია"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ថ្ម <xliff:g id="STATE">%s</xliff:g> ។"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"របៀបពេលជិះយន្តហោះ <xliff:g id="STATE">%s</xliff:g> ។"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"ប៊្លូធូស <xliff:g id="STATE">%s</xliff:g> ។"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"កំណត់សំឡេងរោទ៍សម្រាប់ <xliff:g id="TIME">%s</xliff:g> ។"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"បានបិទទិន្នន័យ 2G-3G"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"បានបិទទិន្នន័យ 4G"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"배터리 <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"비행기 모드가 <xliff:g id="STATE">%s</xliff:g> 상태입니다."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"블루투스 <xliff:g id="STATE">%s</xliff:g>"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"알람이 <xliff:g id="TIME">%s</xliff:g>(으)로 설정되었습니다."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G 데이터 사용중지됨"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G 데이터 사용중지됨"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ແບັດເຕີຣີ <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"ໂໝດໃນຍົນ <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"ຕັ້ງໂມງປຸກ <xliff:g id="TIME">%s</xliff:g> ແລ້ວ."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"ອິນເຕີເນັດ 2G, 3G ຖືກປິດແລ້ວ"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"ການນຳໃຊ້ຂໍ້ມູນ 4G ຖືກປິດແລ້ວ"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Akumuliatorius <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Lėktuvo režimas <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"„Bluetooth“ <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Signalas nustatytas <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G duomenys neleidžiami"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G duomenys neleidžiami"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Akumulatora statuss: <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Lidojuma režīma statuss: <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth statuss: <xliff:g id="STATE">%s</xliff:g>"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Signāls ir iestatīts uz: <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G dati atspējoti"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G dati atspējoti"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Батерей <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Нислэгийн горим <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Блютүүт <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Сэрүүлгийг <xliff:g id="TIME">%s</xliff:g>-д тохируулсан."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G дата идэвхгүй болов"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G дата идэвхгүй байна"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateri <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mod Pesawat <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Penggera ditetapkan pada <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data 2G-3G dilumpuhkan"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data 4G dilumpuhkan"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batteri – <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Flymodus – <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth – <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarmen ble stilt for <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data er deaktivert"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-data er deaktivert"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Accu: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Vliegmodus: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm is ingesteld op <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-/3G-gegevens uitgeschakeld"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-gegevens uitgeschakeld"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateria: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Tryb samolotowy: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm ustawiony na <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Wyłączono transmisję danych 2G/3G"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Wyłączono transmisję danych 4G"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateria <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo de Avião <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarme definido para <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Os dados 2G-3G estão desativados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Os dados 4G estão desativados"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateria <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo avião <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarme definido para <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dados 2G e 3G desativados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dados 4G desativados"</string>
<skip />
<!-- no translation found for accessibility_quick_settings_bluetooth (5749054971341882340) -->
<skip />
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<!-- no translation found for accessibility_quick_settings_alarm (3959908972897295660) -->
<skip />
<!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Baterie <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mod Avion <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarmă setată pentru <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datele 2G-3G au fost dezactivate"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datele 4G au fost dezactivate"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Батарея: <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Режим полета <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Будильник установлен на <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Передача данных по каналам 2G и 3G отключена"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Передача данных по каналу 4G отключена"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batéria: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Režim V lietadle: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Budík nastavený na <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dátové prenosy 2G a 3G sú zakázané"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dátové prenosy 4G sú zakázané"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Baterija: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Letalski način: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm je nastavljen na <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Podatki 2G-3G so onemogočeni"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Podatki 4G so onemogočeni"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Батерија: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Режим рада у авиону: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Аларм је подешен за <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G подаци су онемогућени"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G подаци су онемогућени"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batteri <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Flygplansläge <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarmet ringer <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data via 2G-3G har inaktiverats"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data via 4G har inaktiverats"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Betri <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Hali ya Ndege <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Kengele imewekwa <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data ya 2G-3G imelemazwa"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data ya 4G imelemazwa"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"แบตเตอรี่ <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"โหมดใช้งานบนเครื่องบิน <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"บลูทูธ <xliff:g id="STATE">%s</xliff:g>"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"ตั้งเวลาปลุกไว้ที่ <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"ปิดใช้งานข้อมูล 2G-3G แล้ว"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"ปิดใช้งานข้อมูล 4G แล้ว"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"<xliff:g id="STATE">%s</xliff:g> ng baterya."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"<xliff:g id="STATE">%s</xliff:g> ng Airplane Mode."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"<xliff:g id="STATE">%s</xliff:g> ng Bluetooth."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm set para sa <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Di pinapagana ang 2G-3G na data"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Hindi pinapagana ang 4G na data"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Pil <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Uçak Modu <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm saati: <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G verileri devre dışı bırakıldı"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G verileri devre dışı"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Акумулятор: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Режим польоту: <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Сигнал установлено на <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Дані 2G–3G вимкнено"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Дані 4G вимкнено"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Pin <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Chế độ trên máy bay <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Báo thức được đặt cho <xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Đã tắt dữ liệu 2G-3G"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Đã tắt dữ liệu 4G"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"电池电量:<xliff:g id="STATE">%s</xliff:g>。"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"飞行模式:<xliff:g id="STATE">%s</xliff:g>。"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"蓝牙:<xliff:g id="STATE">%s</xliff:g>。"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"闹钟已设置为:<xliff:g id="TIME">%s</xliff:g>。"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G 数据网络已停用"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G 数据网络已停用"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"電池電量:<xliff:g id="STATE">%s</xliff:g>。"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"飛航模式:<xliff:g id="STATE">%s</xliff:g>。"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"藍牙:<xliff:g id="STATE">%s</xliff:g>。"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"鬧鐘已設定為:<xliff:g id="TIME">%s</xliff:g>。"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"已停用 2G-3G 數據"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"已停用 4G 數據"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"電池電量:<xliff:g id="STATE">%s</xliff:g>。"</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"飛航模式:<xliff:g id="STATE">%s</xliff:g>。"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"藍牙:<xliff:g id="STATE">%s</xliff:g>。"</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"鬧鐘已設定為:<xliff:g id="TIME">%s</xliff:g>。"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"已停用 2G-3G 數據"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"已停用 4G 數據"</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Ibhethri <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Imodi yendiza <xliff:g id="STATE">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"I-Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+ <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+ <skip />
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"I-alamu isethiwe ngo-<xliff:g id="TIME">%s</xliff:g>."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"idatha ye-2G-3G ivimbelwe"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Idatha ye-4G ivimbelwe"</string>
<string name="accessibility_quick_settings_airplane">Airplane Mode <xliff:g id="state" example="Off">%s</xliff:g>.</string>
<!-- Content description of the bluetooth tile in quick settings (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_quick_settings_bluetooth">Bluetooth <xliff:g id="state" example="Off">%s</xliff:g>.</string>
+ <!-- Content description of the location tile in quick settings (not shown on the screen). [CHAR LIMIT=NONE] -->
+ <string name="accessibility_quick_settings_location">Location <xliff:g id="state" example="Off">%s</xliff:g>.</string>
<!-- Content description of the alarm tile in quick settings (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_quick_settings_alarm">Alarm set for <xliff:g id="time" example="Wed 3:30 PM">%s</xliff:g>.</string>
package com.android.systemui;
import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
if (mCellSize < 512) { // assuming 512x512 images
opts.inSampleSize = 2;
}
+ opts.inMutable = true;
+ Bitmap loaded = null;
for (int[] list : new int[][] { PASTRIES, RARE_PASTRIES, XRARE_PASTRIES, XXRARE_PASTRIES }) {
for (int resid : list) {
- final BitmapDrawable d = new BitmapDrawable(res,
- convertToAlphaMask(BitmapFactory.decodeResource(res, resid, opts)));
+ opts.inBitmap = loaded;
+ loaded = BitmapFactory.decodeResource(res, resid, opts);
+ final BitmapDrawable d = new BitmapDrawable(res, convertToAlphaMask(loaded));
d.setColorFilter(new ColorMatrixColorFilter(ALPHA_MASK));
d.setBounds(0, 0, mCellSize, mCellSize);
mDrawables.append(resid, d);
}
}
+ loaded = null;
if (DEBUG) setWillNotDraw(false);
}
v.getOverlay().add(d);
}
- v.setLayerType(View.LAYER_TYPE_HARDWARE, null);
-
lp.width = lp.height = mCellSize;
addView(v, lp);
place(v, pt, false);
v.setScaleX(0.5f * s);
v.setScaleY(0.5f * s);
v.setAlpha(0f);
- v.animate().scaleX(s).scaleY(s).alpha(1f).setDuration(animationLen);
+ v.animate().withLayer().scaleX(s).scaleY(s).alpha(1f).setDuration(animationLen);
}
}
}
place(v, new Point(irand(0, mColumns), irand(0, mRows)), animate);
}
+ // we don't have .withLayer() on general Animators
+ private final Animator.AnimatorListener makeHardwareLayerListener(final View v) {
+ return new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animator) {
+ v.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+ v.buildLayer();
+ }
+ @Override
+ public void onAnimationEnd(Animator animator) {
+ v.setLayerType(View.LAYER_TYPE_NONE, null);
+ }
+ };
+ }
+
private final HashSet<View> tmpSet = new HashSet<View>();
public synchronized void place(View v, Point pt, boolean animate) {
final int i = pt.x;
if (squatter != v) {
squatter.setTag(TAG_POS, null);
if (animate) {
- squatter.animate().scaleX(0.5f).scaleY(0.5f).alpha(0)
+ squatter.animate().withLayer()
+ .scaleX(0.5f).scaleY(0.5f).alpha(0)
.setDuration(DURATION)
.setInterpolator(new AccelerateInterpolator())
.setListener(new Animator.AnimatorListener() {
if (animate) {
v.bringToFront();
+
AnimatorSet set1 = new AnimatorSet();
set1.playTogether(
ObjectAnimator.ofFloat(v, View.SCALE_X, (float) scale),
);
set1.setInterpolator(new AnticipateOvershootInterpolator());
set1.setDuration(DURATION);
- set1.start();
AnimatorSet set2 = new AnimatorSet();
set2.playTogether(
);
set2.setInterpolator(new DecelerateInterpolator());
set2.setDuration(DURATION);
+
+ set1.addListener(makeHardwareLayerListener(v));
+
+ set1.start();
set2.start();
} else {
v.setX(i * mCellSize + (scale-1) * mCellSize /2);
return true; // Consume click
}} );
}
- mModel.addLocationTile(locationTile,
- new QuickSettingsModel.BasicRefreshCallback(locationTile));
+ mModel.addLocationTile(locationTile, new QuickSettingsModel.RefreshCallback() {
+ @Override
+ public void refreshView(QuickSettingsTileView unused, State state) {
+ locationTile.setImageResource(state.iconId);
+ String locationState = mContext.getString(
+ (state.enabled) ? R.string.accessibility_desc_on
+ : R.string.accessibility_desc_off);
+ locationTile.setContentDescription(mContext.getString(
+ R.string.accessibility_quick_settings_location,
+ locationState));
+ locationTile.setText(state.label);
+ }
+ });
parent.addView(locationTile);
}
private PopupWindow mActionModePopup;
private Runnable mShowActionModePopup;
- // View added at runtime to IME windows to cover the navigation bar
+ // View added at runtime to draw under the status bar area
+ private View mStatusGuard;
+ // View added at runtime to draw under the navigation bar area
private View mNavigationGuard;
public DecorView(Context context, int featureId) {
@Override
protected boolean fitSystemWindows(Rect insets) {
mFrameOffsets.set(insets);
+ updateStatusGuard(insets);
+ updateNavigationGuard(insets);
+ if (getForeground() != null) {
+ drawableChanged();
+ }
+ return super.fitSystemWindows(insets);
+ }
+ private void updateStatusGuard(Rect insets) {
+ boolean showStatusGuard = false;
+ // Show the status guard when the non-overlay contextual action bar is showing
+ if (mActionModeView != null) {
+ if (mActionModeView.getLayoutParams() instanceof MarginLayoutParams) {
+ MarginLayoutParams mlp = (MarginLayoutParams) mActionModeView.getLayoutParams();
+ boolean mlpChanged = false;
+ final boolean nonOverlayShown =
+ (getLocalFeatures() & (1 << FEATURE_ACTION_MODE_OVERLAY)) == 0
+ && mActionModeView.isShown();
+ if (nonOverlayShown) {
+ // set top margin to top insets, show status guard
+ if (mlp.topMargin != insets.top) {
+ mlpChanged = true;
+ mlp.topMargin = insets.top;
+ if (mStatusGuard == null) {
+ mStatusGuard = new View(mContext);
+ mStatusGuard.setBackgroundColor(mContext.getResources()
+ .getColor(R.color.input_method_navigation_guard));
+ addView(mStatusGuard, new LayoutParams(
+ LayoutParams.MATCH_PARENT, mlp.topMargin,
+ Gravity.START | Gravity.TOP));
+ } else {
+ LayoutParams lp = (LayoutParams) mStatusGuard.getLayoutParams();
+ if (lp.height != mlp.topMargin) {
+ lp.height = mlp.topMargin;
+ mStatusGuard.setLayoutParams(lp);
+ }
+ }
+ }
+ insets.top = 0; // consume top insets
+ showStatusGuard = true;
+ } else {
+ // reset top margin
+ if (mlp.topMargin != 0) {
+ mlpChanged = true;
+ mlp.topMargin = 0;
+ }
+ }
+ if (mlpChanged) {
+ mActionModeView.setLayoutParams(mlp);
+ }
+ }
+ }
+ if (mStatusGuard != null) {
+ mStatusGuard.setVisibility(showStatusGuard ? View.VISIBLE : View.GONE);
+ }
+ }
+
+ private void updateNavigationGuard(Rect insets) {
// IMEs lay out below the nav bar, but the content view must not (for back compat)
if (getAttributes().type == WindowManager.LayoutParams.TYPE_INPUT_METHOD) {
// prevent the content view from including the nav bar height
mNavigationGuard.setLayoutParams(lp);
}
}
-
- if (getForeground() != null) {
- drawableChanged();
- }
- return super.fitSystemWindows(insets);
}
private void drawableChanged() {
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ requestFitSystemWindows();
return mWrapped.onPrepareActionMode(mode, menu);
}
}
}
mActionMode = null;
+ requestFitSystemWindows();
}
}
}
final boolean isScreenSecurelyLocked =
isScreenLocked && mKeyguardManager.isKeyguardSecure();
final boolean inputShown = mInputShown && (!isScreenLocked || mInputBoundToKeyguard);
- mImeWindowVis = (!isScreenSecurelyLocked && (inputShown || hardKeyShown)) ?
- (InputMethodService.IME_ACTIVE | InputMethodService.IME_VISIBLE) : 0;
+ final boolean inputActive = !isScreenSecurelyLocked && (inputShown || hardKeyShown);
+ // We assume the softkeyboard is shown when the input is active as long as the
+ // hard keyboard is not shown.
+ final boolean inputVisible = inputActive && !hardKeyShown;
+ mImeWindowVis = (inputActive ? InputMethodService.IME_ACTIVE : 0)
+ | (inputVisible ? InputMethodService.IME_VISIBLE : 0);
updateImeWindowStatusLocked();
}
// Set this to true to have the watchdog record kernel thread stacks when it fires
static final boolean RECORD_KERNEL_THREADS = true;
- static final int TIME_TO_WAIT = DB ? 5*1000 : 30*1000;
+ static final long DEFAULT_TIMEOUT = DB ? 10*1000 : 60*1000;
+ static final long CHECK_INTERVAL = DEFAULT_TIMEOUT / 2;
+
+ // These are temporally ordered: larger values as lateness increases
+ static final int COMPLETED = 0;
+ static final int WAITING = 1;
+ static final int WAITED_HALF = 2;
+ static final int OVERDUE = 3;
static final String[] NATIVE_STACKS_OF_INTEREST = new String[] {
"/system/bin/mediaserver",
public final class HandlerChecker implements Runnable {
private final Handler mHandler;
private final String mName;
+ private final long mWaitMax;
private final ArrayList<Monitor> mMonitors = new ArrayList<Monitor>();
private boolean mCompleted;
private Monitor mCurrentMonitor;
+ private long mStartTime;
- HandlerChecker(Handler handler, String name) {
+ HandlerChecker(Handler handler, String name, long waitMaxMillis) {
mHandler = handler;
mName = name;
+ mWaitMax = waitMaxMillis;
+ mCompleted = true;
}
public void addMonitor(Monitor monitor) {
mCompleted = true;
return;
}
+
+ if (!mCompleted) {
+ // we already have a check in flight, so no need
+ return;
+ }
+
mCompleted = false;
mCurrentMonitor = null;
+ mStartTime = SystemClock.uptimeMillis();
mHandler.postAtFrontOfQueue(this);
}
- public boolean isCompletedLocked() {
- return mCompleted;
+ public boolean isOverdueLocked() {
+ return (!mCompleted) && (SystemClock.uptimeMillis() > mStartTime + mWaitMax);
+ }
+
+ public int getCompletionStateLocked() {
+ if (mCompleted) {
+ return COMPLETED;
+ } else {
+ long latency = SystemClock.uptimeMillis() - mStartTime;
+ if (latency < mWaitMax/2) {
+ return WAITING;
+ } else if (latency < mWaitMax) {
+ return WAITED_HALF;
+ }
+ }
+ return OVERDUE;
}
public Thread getThread() {
// The shared foreground thread is the main checker. It is where we
// will also dispatch monitor checks and do other work.
- mMonitorChecker = new HandlerChecker(FgThread.getHandler(), "foreground thread");
+ mMonitorChecker = new HandlerChecker(FgThread.getHandler(),
+ "foreground thread", DEFAULT_TIMEOUT);
mHandlerCheckers.add(mMonitorChecker);
// Add checker for main thread. We only do a quick check since there
// can be UI running on the thread.
mHandlerCheckers.add(new HandlerChecker(new Handler(Looper.getMainLooper()),
- "main thread"));
+ "main thread", DEFAULT_TIMEOUT));
// Add checker for shared UI thread.
- mHandlerCheckers.add(new HandlerChecker(UiThread.getHandler(), "ui thread"));
+ mHandlerCheckers.add(new HandlerChecker(UiThread.getHandler(),
+ "ui thread", DEFAULT_TIMEOUT));
// And also check IO thread.
- mHandlerCheckers.add(new HandlerChecker(IoThread.getHandler(), "i/o thread"));
+ mHandlerCheckers.add(new HandlerChecker(IoThread.getHandler(),
+ "i/o thread", DEFAULT_TIMEOUT));
}
public void init(Context context, BatteryService battery,
}
public void addThread(Handler thread, String name) {
+ addThread(thread, name, DEFAULT_TIMEOUT);
+ }
+
+ public void addThread(Handler thread, String name, long timeoutMillis) {
synchronized (this) {
if (isAlive()) {
throw new RuntimeException("Threads can't be added once the Watchdog is running");
}
- mHandlerCheckers.add(new HandlerChecker(thread, name));
+ mHandlerCheckers.add(new HandlerChecker(thread, name, timeoutMillis));
}
}
pms.reboot(false, reason, false);
}
- private boolean haveAllCheckersCompletedLocked() {
+ private int evaluateCheckerCompletionLocked() {
+ int state = COMPLETED;
for (int i=0; i<mHandlerCheckers.size(); i++) {
HandlerChecker hc = mHandlerCheckers.get(i);
- if (!hc.isCompletedLocked()) {
- return false;
- }
+ state = Math.max(state, hc.getCompletionStateLocked());
}
- return true;
+ return state;
}
private ArrayList<HandlerChecker> getBlockedCheckersLocked() {
ArrayList<HandlerChecker> checkers = new ArrayList<HandlerChecker>();
for (int i=0; i<mHandlerCheckers.size(); i++) {
HandlerChecker hc = mHandlerCheckers.get(i);
- if (!hc.isCompletedLocked()) {
+ if (hc.isOverdueLocked()) {
checkers.add(hc);
}
}
final String subject;
final boolean allowRestart;
synchronized (this) {
- long timeout = TIME_TO_WAIT;
- if (!waitedHalf) {
- // If we are not at the half-point of waiting, perform a
- // new set of checks. Otherwise we are still waiting for a previous set.
- for (int i=0; i<mHandlerCheckers.size(); i++) {
- HandlerChecker hc = mHandlerCheckers.get(i);
- hc.scheduleCheckLocked();
- }
+ long timeout = CHECK_INTERVAL;
+ // Make sure we (re)spin the checkers that have become idle within
+ // this wait-and-check interval
+ for (int i=0; i<mHandlerCheckers.size(); i++) {
+ HandlerChecker hc = mHandlerCheckers.get(i);
+ hc.scheduleCheckLocked();
}
// NOTE: We use uptimeMillis() here because we do not want to increment the time we
} catch (InterruptedException e) {
Log.wtf(TAG, e);
}
- timeout = TIME_TO_WAIT - (SystemClock.uptimeMillis() - start);
+ timeout = CHECK_INTERVAL - (SystemClock.uptimeMillis() - start);
}
- if (haveAllCheckersCompletedLocked()) {
- // The monitors have returned.
+ final int waitState = evaluateCheckerCompletionLocked();
+ if (waitState == COMPLETED) {
+ // The monitors have returned; reset
waitedHalf = false;
continue;
- }
-
- if (!waitedHalf) {
- // We've waited half the deadlock-detection interval. Pull a stack
- // trace and wait another half.
- ArrayList<Integer> pids = new ArrayList<Integer>();
- pids.add(Process.myPid());
- ActivityManagerService.dumpStackTraces(true, pids, null, null,
- NATIVE_STACKS_OF_INTEREST);
- waitedHalf = true;
+ } else if (waitState == WAITING) {
+ // still waiting but within their configured intervals; back off and recheck
+ continue;
+ } else if (waitState == WAITED_HALF) {
+ if (!waitedHalf) {
+ // We've waited half the deadlock-detection interval. Pull a stack
+ // trace and wait another half.
+ ArrayList<Integer> pids = new ArrayList<Integer>();
+ pids.add(Process.myPid());
+ ActivityManagerService.dumpStackTraces(true, pids, null, null,
+ NATIVE_STACKS_OF_INTEREST);
+ waitedHalf = true;
+ }
continue;
}
+ // something is overdue!
blockedCheckers = getBlockedCheckersLocked();
subject = describeCheckersLocked(blockedCheckers);
allowRestart = mAllowRestart;
if (DEBUG_MU)
Slog.v(TAG_MU, "generateApplicationProvidersLocked, cpi.uid = " + cpr.uid);
app.pubProviders.put(cpi.name, cpr);
- app.addPackage(cpi.applicationInfo.packageName, mProcessStats);
+ if (!cpi.multiprocess || !"android".equals(cpi.packageName)) {
+ // Don't add this if it is a platform component that is marked
+ // to run in multiple processes, because this is actually
+ // part of the framework so doesn't make sense to track as a
+ // separate apk in the process.
+ app.addPackage(cpi.applicationInfo.packageName, mProcessStats);
+ }
ensurePackageDexOpt(cpi.applicationInfo.packageName);
}
}
+ ") when registering receiver " + receiver);
}
if (callerApp.info.uid != Process.SYSTEM_UID &&
- !callerApp.pkgList.containsKey(callerPackage)) {
+ !callerApp.pkgList.containsKey(callerPackage) &&
+ !"android".equals(callerPackage)) {
throw new SecurityException("Given caller package " + callerPackage
+ " is not running in process " + callerApp);
}
}
/**
+ * Determine if home should be visible below the passed record.
+ * @param record activity we are querying for.
+ * @return true if home is visible below the passed activity, false otherwise.
+ */
+ boolean isActivityOverHome(ActivityRecord record) {
+ // Start at record and go down, look for either home or a visible fullscreen activity.
+ final TaskRecord recordTask = record.task;
+ for (int taskNdx = mTaskHistory.indexOf(recordTask); taskNdx >= 0; --taskNdx) {
+ TaskRecord task = mTaskHistory.get(taskNdx);
+ final ArrayList<ActivityRecord> activities = task.mActivities;
+ final int startNdx =
+ task == recordTask ? activities.indexOf(record) : activities.size() - 1;
+ for (int activityNdx = startNdx; activityNdx >= 0; --activityNdx) {
+ final ActivityRecord r = activities.get(activityNdx);
+ if (r.isHomeActivity()) {
+ return true;
+ }
+ if (!r.finishing && r.visible && r.fullscreen) {
+ // Passed activity is over a visible fullscreen activity.
+ return false;
+ }
+ }
+ if (task.mOnTopOfHome) {
+ // Got to the bottom of a task on top of home without finding a visible fullscreen
+ // activity. Home is visible.
+ return true;
+ }
+ }
+ // Got to the bottom of this stack and still don't know. If this is over the home stack
+ // then record is over home. May not work if we ever get more than two layers.
+ return mStackSupervisor.isFrontStack(this);
+ }
+
+ /**
* Version of ensureActivitiesVisible that can easily be called anywhere.
*/
final boolean ensureActivitiesVisibleLocked(ActivityRecord starting, int configChanges) {
// At this point, nothing else needs to be shown
if (DEBUG_VISBILITY) Slog.v(TAG, "Fullscreen: at " + r);
behindFullscreen = true;
- } else if (task.mOnTopOfHome) {
- // Work our way down from r to bottom of task and see if there are any
- // visible activities below r.
- int rIndex = task.mActivities.indexOf(r);
- for ( --rIndex; rIndex >= 0; --rIndex) {
- final ActivityRecord blocker = task.mActivities.get(rIndex);
- if (!blocker.finishing) {
- if (DEBUG_VISBILITY) Slog.v(TAG, "Home visibility for " +
- r + " blocked by " + blocker);
- break;
- }
- }
- if (rIndex < 0) {
- // Got to task bottom without finding a visible activity, show home.
- if (DEBUG_VISBILITY) Slog.v(TAG, "Showing home: at " + r);
- showHomeBehindStack = true;
- behindFullscreen = true;
- }
+ } else if (isActivityOverHome(r)) {
+ if (DEBUG_VISBILITY) Slog.v(TAG, "Showing home: at " + r);
+ showHomeBehindStack = true;
+ behindFullscreen = true;
}
} else {
if (DEBUG_VISBILITY) Slog.v(
r.addResultLocked(null, resultWho, requestCode, resultCode, data);
}
+ private void adjustFocusedActivityLocked(ActivityRecord r) {
+ if (mStackSupervisor.isFrontStack(this) && mService.mFocusedActivity == r) {
+ ActivityRecord next = topRunningActivityLocked(null);
+ if (next != r) {
+ final TaskRecord task = r.task;
+ if (r.frontOfTask && task == topTask() && task.mOnTopOfHome) {
+ mStackSupervisor.moveHomeToTop();
+ }
+ }
+ mService.setFocusedActivityLocked(mStackSupervisor.topRunningActivityLocked());
+ }
+ }
+
final void stopActivityLocked(ActivityRecord r) {
if (DEBUG_SWITCH) Slog.d(TAG, "Stopping: " + r);
if ((r.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_HISTORY) != 0
}
if (r.app != null && r.app.thread != null) {
- if (mStackSupervisor.isFrontStack(this)) {
- if (mService.mFocusedActivity == r) {
- mService.setFocusedActivityLocked(topRunningActivityLocked(null));
- }
- }
+ adjustFocusedActivityLocked(r);
r.resumeKeyDispatchingLocked();
try {
r.stopped = false;
}
r.pauseKeyDispatchingLocked();
- if (mStackSupervisor.isFrontStack(this)) {
- if (mService.mFocusedActivity == r) {
- mService.setFocusedActivityLocked(mStackSupervisor.topRunningActivityLocked());
- }
- }
+
+ adjustFocusedActivityLocked(r);
finishActivityResultsLocked(r, resultCode, resultData);
if (app != null && app.thread != null) {
try {
- app.addPackage(r.info.packageName, mService.mProcessStats);
+ if ((r.info.flags&ActivityInfo.FLAG_MULTIPROCESS) == 0
+ || !"android".equals(r.info.packageName)) {
+ // Don't add this if it is a platform component that is marked
+ // to run in multiple processes, because this is actually
+ // part of the framework so doesn't make sense to track as a
+ // separate apk in the process.
+ app.addPackage(r.info.packageName, mService.mProcessStats);
+ }
realStartActivityLocked(r, app, andResume, checkConfig);
return;
} catch (RemoteException e) {
final TaskRecord task = r.task;
if (r.isApplicationActivity() || (task != null && task.isApplicationTask())) {
if (task != null) {
- if (mFocusedStack != task.stack) {
+ final ActivityStack taskStack = task.stack;
+ if (mFocusedStack != taskStack) {
if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG,
"adjustStackFocus: Setting focused stack to r=" + r + " task=" + task);
- mFocusedStack = task.stack;
+ mFocusedStack = taskStack.isHomeStack() ? null : taskStack;
} else {
if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG,
"adjustStackFocus: Focused stack already=" + mFocusedStack);
}
- return mFocusedStack;
+ return taskStack;
}
if (mFocusedStack != null) {
}
// Time to create the first app stack for this user.
- int stackId = mService.createStack(-1, HOME_STACK_ID,
- StackBox.TASK_STACK_GOES_OVER, 1.0f);
+ int stackId =
+ mService.createStack(-1, HOME_STACK_ID, StackBox.TASK_STACK_GOES_OVER, 1.0f);
if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: New stack r=" + r +
" stackId=" + stackId);
mFocusedStack = getStack(stackId);
if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG,
"setFocusedStack: Setting focused stack to r=" + r + " task=" + r.task +
" Callers=" + Debug.getCallers(3));
- mFocusedStack = r.task.stack;
+ final ActivityStack taskStack = r.task.stack;
+ mFocusedStack = taskStack.isHomeStack() ? null : taskStack;
if (mStackState != STACK_STATE_HOME_IN_BACK) {
if (DEBUG_STACK) Slog.d(TAG, "setFocusedStack: mStackState old=" +
stackStateToString(mStackState) + " new=" +
}
public void dump(PrintWriter pw, String prefix) {
- pw.print(prefix); pw.print("mDismissKeyguardOnNextActivity:");
+ pw.print(prefix); pw.print("mDismissKeyguardOnNextActivity=");
pw.println(mDismissKeyguardOnNextActivity);
- pw.print(prefix); pw.print("mStackState="); pw.println(stackStateToString(mStackState));
- pw.print(prefix); pw.println("mSleepTimeout: " + mSleepTimeout);
- pw.print(prefix); pw.println("mCurTaskId: " + mCurTaskId);
- pw.print(prefix); pw.println("mUserStackInFront: " + mUserStackInFront);
+ pw.print(prefix); pw.print("mFocusedStack=" + mFocusedStack);
+ pw.print(" mStackState="); pw.println(stackStateToString(mStackState));
+ pw.print(prefix); pw.println("mSleepTimeout=" + mSleepTimeout);
+ pw.print(prefix); pw.println("mCurTaskId=" + mCurTaskId);
+ pw.print(prefix); pw.println("mUserStackInFront=" + mUserStackInFront);
}
ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) {
}
}
+ private void dumpAggregatedStats(PrintWriter pw, long aggregateHours, long now,
+ String reqPackage, boolean isCompact, boolean dumpDetails, boolean dumpFullDetails,
+ boolean dumpAll, boolean activeOnly) {
+ ParcelFileDescriptor pfd = getStatsOverTime(aggregateHours*60*60*1000
+ - (ProcessStats.COMMIT_PERIOD/2));
+ if (pfd == null) {
+ pw.println("Unable to build stats!");
+ return;
+ }
+ ProcessStats stats = new ProcessStats(false);
+ InputStream stream = new ParcelFileDescriptor.AutoCloseInputStream(pfd);
+ stats.read(stream);
+ if (stats.mReadError != null) {
+ pw.print("Failure reading: "); pw.println(stats.mReadError);
+ return;
+ }
+ if (isCompact) {
+ stats.dumpCheckinLocked(pw, reqPackage);
+ } else {
+ if (dumpDetails || dumpFullDetails) {
+ stats.dumpLocked(pw, reqPackage, now, !dumpFullDetails, dumpAll, activeOnly);
+ } else {
+ stats.dumpSummaryLocked(pw, reqPackage, now, activeOnly);
+ }
+ }
+ }
+
static private void dumpHelp(PrintWriter pw) {
pw.println("Process stats (procstats) dump options:");
pw.println(" [--checkin|-c|--csv] [--csv-screen] [--csv-proc] [--csv-mem]");
}
return;
} else if (aggregateHours != 0) {
- ParcelFileDescriptor pfd = getStatsOverTime(aggregateHours*60*60*1000
- - (ProcessStats.COMMIT_PERIOD/2));
- if (pfd == null) {
- pw.println("Unable to build stats!");
- return;
- }
- ProcessStats stats = new ProcessStats(false);
- InputStream stream = new ParcelFileDescriptor.AutoCloseInputStream(pfd);
- stats.read(stream);
- if (stats.mReadError != null) {
- pw.print("Failure reading: "); pw.println(stats.mReadError);
- return;
- }
- if (isCompact) {
- stats.dumpCheckinLocked(pw, reqPackage);
- } else {
- if (dumpDetails || dumpFullDetails) {
- stats.dumpLocked(pw, reqPackage, now, !dumpFullDetails, dumpAll, activeOnly);
- } else {
- stats.dumpSummaryLocked(pw, reqPackage, now, activeOnly);
- }
- }
+ dumpAggregatedStats(pw, aggregateHours, now, reqPackage, isCompact,
+ dumpDetails, dumpFullDetails, dumpAll, activeOnly);
return;
}
}
}
if (!isCheckin) {
+ if (dumpAll) {
+ if (sepNeeded) {
+ pw.println();
+ pw.println("AGGREGATED OVER LAST 24 HOURS:");
+ }
+ dumpAggregatedStats(pw, 24, now, reqPackage, isCompact,
+ dumpDetails, dumpFullDetails, dumpAll, activeOnly);
+ pw.println();
+ pw.println("AGGREGATED OVER LAST 3 HOURS:");
+ dumpAggregatedStats(pw, 3, now, reqPackage, isCompact,
+ dumpDetails, dumpFullDetails, dumpAll, activeOnly);
+ sepNeeded = true;
+ }
synchronized (mAm) {
if (isCompact) {
mProcessStats.dumpCheckinLocked(pw, reqPackage);
static final int REMOVE_CHATTY = 1<<16;
/**
+ * Timeout (in milliseconds) after which the watchdog should declare that
+ * our handler thread is wedged. The usual default for such things is one
+ * minute but we sometimes do very lengthy I/O operations on this thread,
+ * such as installing multi-gigabyte applications, so ours needs to be longer.
+ */
+ private static final long WATCHDOG_TIMEOUT = 1000*60*10; // ten minutes
+
+ /**
* Whether verification is enabled by default.
*/
private static final boolean DEFAULT_VERIFY_ENABLE = true;
synchronized (mPackages) {
mHandlerThread.start();
mHandler = new PackageHandler(mHandlerThread.getLooper());
- Watchdog.getInstance().addThread(mHandler, mHandlerThread.getName());
+ Watchdog.getInstance().addThread(mHandler, mHandlerThread.getName(),
+ WATCHDOG_TIMEOUT);
File dataDir = Environment.getDataDirectory();
mAppDataDir = new File(dataDir, "data");
+ ps.name + " changing from " + updatedPkg.codePathString
+ " to " + scanFile);
updatedPkg.codePath = scanFile;
- updatedPkg.codePathString = scanFile.toString();
+ updatedPkg.codePathString = scanFile.toString();
+ // This is the point at which we know that the system-disk APK
+ // for this package has moved during a reboot (e.g. due to an OTA),
+ // so we need to reevaluate it for privilege policy.
+ if (locationIsPrivileged(scanFile)) {
+ updatedPkg.pkgFlags |= ApplicationInfo.FLAG_PRIVILEGED;
+ }
}
updatedPkg.pkg = pkg;
mLastScanError = PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE;
+ "; replacing with new");
p = null;
} else {
- if ((pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0) {
- // If what we are scanning is a system package, then
- // make it so, regardless of whether it was previously
- // installed only in the data partition.
- p.pkgFlags |= ApplicationInfo.FLAG_SYSTEM;
- }
+ // If what we are scanning is a system (and possibly privileged) package,
+ // then make it so, regardless of whether it was previously installed only
+ // in the data partition.
+ final int sysPrivFlags = pkgFlags
+ & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_PRIVILEGED);
+ p.pkgFlags |= sysPrivFlags;
}
}
if (p == null) {
Region mTouchExcludeRegion = new Region();
/** Save allocating when retrieving tasks */
- ArrayList<Task> mTmpTasks = new ArrayList<Task>();
+ ArrayList<Task> mTaskHistory = new ArrayList<Task>();
/** Save allocating when calculating rects */
Rect mTmpRect = new Rect();
void moveStack(TaskStack stack, boolean toTop) {
mStackHistory.remove(stack);
mStackHistory.add(toTop ? mStackHistory.size() : 0, stack);
- mService.moveStackWindowsLocked(stack);
+ mService.moveStackWindowsLocked(this);
}
public boolean isPrivate() {
* @return All the Tasks, in order, on this display.
*/
ArrayList<Task> getTasks() {
- mTmpTasks.clear();
- final int numStacks = mStackHistory.size();
- for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) {
- mTmpTasks.addAll(mStackHistory.get(stackNdx).getTasks());
+ return mTaskHistory;
+ }
+
+ void addTask(Task task, boolean toTop) {
+ mTaskHistory.remove(task);
+
+ final int userId = task.mUserId;
+ int taskNdx;
+ final int numTasks = mTaskHistory.size();
+ if (toTop) {
+ for (taskNdx = numTasks - 1; taskNdx >= 0; --taskNdx) {
+ if (mTaskHistory.get(taskNdx).mUserId == userId) {
+ break;
+ }
+ }
+ ++taskNdx;
+ } else {
+ for (taskNdx = 0; taskNdx < numTasks; ++taskNdx) {
+ if (mTaskHistory.get(taskNdx).mUserId == userId) {
+ break;
+ }
+ }
}
- if (WindowManagerService.DEBUG_LAYERS) Slog.i(TAG, "getTasks: mStackHistory=" +
- mStackHistory);
- return mTmpTasks;
+
+ mTaskHistory.add(taskNdx, task);
+ }
+
+ void removeTask(Task task) {
+ mTaskHistory.remove(task);
}
TaskStack getHomeStack() {
/** @return The number of tokens in all of the Tasks on this display. */
int numTokens() {
- getTasks();
int count = 0;
- for (int taskNdx = mTmpTasks.size() - 1; taskNdx >= 0; --taskNdx) {
- count += mTmpTasks.get(taskNdx).mAppTokens.size();
+ for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
+ count += mTaskHistory.get(taskNdx).mAppTokens.size();
}
return count;
}
pw.println();
pw.println(" Application tokens in Z order:");
getTasks();
- for (int taskNdx = mTmpTasks.size() - 1; taskNdx >= 0; --taskNdx) {
- AppTokenList tokens = mTmpTasks.get(taskNdx).mAppTokens;
+ for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
+ AppTokenList tokens = mTaskHistory.get(taskNdx).mAppTokens;
for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx) {
final AppWindowToken wtoken = tokens.get(tokenNdx);
pw.print(" App #"); pw.print(ndx--);
mTasks.add(stackNdx, task);
task.mStack = this;
+ mDisplayContent.addTask(task, toTop);
return mDisplayContent.moveHomeStackBox(mStackId == HOME_STACK_ID);
}
if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "removeTask: task=" + task);
mStackBox.makeDirty();
mTasks.remove(task);
+ mDisplayContent.removeTask(task);
}
int remove() {
mDisplayContentsAnimators.delete(displayId);
}
- AppWindowAnimator getWallpaperAppAnimator() {
- return mService.mWallpaperTarget == null
- ? null : mService.mWallpaperTarget.mAppToken == null
- ? null : mService.mWallpaperTarget.mAppToken.mAppAnimator;
- }
-
void hideWallpapersLocked(final WindowState w) {
final WindowState wallpaperTarget = mService.mWallpaperTarget;
final WindowState lowerWallpaperTarget = mService.mLowerWallpaperTarget;
static final long WALLPAPER_TIMEOUT = 150;
// Time we wait after a timeout before trying to wait again.
static final long WALLPAPER_TIMEOUT_RECOVERY = 10000;
+ boolean mAnimateWallpaperWithTarget;
AppWindowToken mFocusedApp = null;
return index;
}
- void moveStackWindowsLocked(TaskStack stack) {
- DisplayContent displayContent = stack.getDisplayContent();
-
+ void moveStackWindowsLocked(DisplayContent displayContent) {
// First remove all of the windows from the list.
- final ArrayList<Task> tasks = stack.getTasks();
+ final ArrayList<Task> tasks = displayContent.getTasks();
final int numTasks = tasks.size();
for (int taskNdx = 0; taskNdx < numTasks; ++taskNdx) {
AppTokenList tokens = tasks.get(taskNdx).mAppTokens;
}
final TaskStack stack = task.mStack;
stack.moveTaskToBottom(task);
- moveStackWindowsLocked(stack);
+ moveStackWindowsLocked(stack.getDisplayContent());
}
} finally {
Binder.restoreCallingIdentity(origId);
canvas.drawBitmap(rawss, matrix, null);
canvas.setBitmap(null);
- if (true || DEBUG_SCREENSHOT) {
+ if (DEBUG_SCREENSHOT) {
// TEST IF IT's ALL BLACK
int[] buffer = new int[bm.getWidth() * bm.getHeight()];
bm.getPixels(buffer, 0, bm.getWidth(), 0, 0, bm.getWidth(), bm.getHeight());
if (displayId != Display.DEFAULT_DISPLAY) {
throw new IllegalArgumentException("Can only set the default display");
}
- synchronized(mWindowMap) {
- // Set some sort of reasonable bounds on the size of the display that we
- // will try to emulate.
- final int MIN_WIDTH = 200;
- final int MIN_HEIGHT = 200;
- final int MAX_SCALE = 2;
- final DisplayContent displayContent = getDisplayContentLocked(displayId);
- if (displayContent != null) {
- width = Math.min(Math.max(width, MIN_WIDTH),
- displayContent.mInitialDisplayWidth * MAX_SCALE);
- height = Math.min(Math.max(height, MIN_HEIGHT),
- displayContent.mInitialDisplayHeight * MAX_SCALE);
- setForcedDisplaySizeLocked(displayContent, width, height);
- Settings.Global.putString(mContext.getContentResolver(),
- Settings.Global.DISPLAY_SIZE_FORCED, width + "," + height);
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized(mWindowMap) {
+ // Set some sort of reasonable bounds on the size of the display that we
+ // will try to emulate.
+ final int MIN_WIDTH = 200;
+ final int MIN_HEIGHT = 200;
+ final int MAX_SCALE = 2;
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
+ if (displayContent != null) {
+ width = Math.min(Math.max(width, MIN_WIDTH),
+ displayContent.mInitialDisplayWidth * MAX_SCALE);
+ height = Math.min(Math.max(height, MIN_HEIGHT),
+ displayContent.mInitialDisplayHeight * MAX_SCALE);
+ setForcedDisplaySizeLocked(displayContent, width, height);
+ Settings.Global.putString(mContext.getContentResolver(),
+ Settings.Global.DISPLAY_SIZE_FORCED, width + "," + height);
+ }
}
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
}
if (displayId != Display.DEFAULT_DISPLAY) {
throw new IllegalArgumentException("Can only set the default display");
}
- synchronized(mWindowMap) {
- final DisplayContent displayContent = getDisplayContentLocked(displayId);
- if (displayContent != null) {
- setForcedDisplaySizeLocked(displayContent, displayContent.mInitialDisplayWidth,
- displayContent.mInitialDisplayHeight);
- Settings.Global.putString(mContext.getContentResolver(),
- Settings.Global.DISPLAY_SIZE_FORCED, "");
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized(mWindowMap) {
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
+ if (displayContent != null) {
+ setForcedDisplaySizeLocked(displayContent, displayContent.mInitialDisplayWidth,
+ displayContent.mInitialDisplayHeight);
+ Settings.Global.putString(mContext.getContentResolver(),
+ Settings.Global.DISPLAY_SIZE_FORCED, "");
+ }
}
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
}
if (displayId != Display.DEFAULT_DISPLAY) {
throw new IllegalArgumentException("Can only set the default display");
}
- synchronized(mWindowMap) {
- final DisplayContent displayContent = getDisplayContentLocked(displayId);
- if (displayContent != null) {
- setForcedDisplayDensityLocked(displayContent, density);
- Settings.Global.putString(mContext.getContentResolver(),
- Settings.Global.DISPLAY_DENSITY_FORCED, Integer.toString(density));
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized(mWindowMap) {
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
+ if (displayContent != null) {
+ setForcedDisplayDensityLocked(displayContent, density);
+ Settings.Global.putString(mContext.getContentResolver(),
+ Settings.Global.DISPLAY_DENSITY_FORCED, Integer.toString(density));
+ }
}
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
}
if (displayId != Display.DEFAULT_DISPLAY) {
throw new IllegalArgumentException("Can only set the default display");
}
- synchronized(mWindowMap) {
- final DisplayContent displayContent = getDisplayContentLocked(displayId);
- if (displayContent != null) {
- setForcedDisplayDensityLocked(displayContent, displayContent.mInitialDisplayDensity);
- Settings.Global.putString(mContext.getContentResolver(),
- Settings.Global.DISPLAY_DENSITY_FORCED, "");
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized(mWindowMap) {
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
+ if (displayContent != null) {
+ setForcedDisplayDensityLocked(displayContent,
+ displayContent.mInitialDisplayDensity);
+ Settings.Global.putString(mContext.getContentResolver(),
+ Settings.Global.DISPLAY_DENSITY_FORCED, "");
+ }
}
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
}
throw new SecurityException("Must hold permission " +
android.Manifest.permission.WRITE_SECURE_SETTINGS);
}
- synchronized(mWindowMap) {
- DisplayContent displayContent = getDisplayContentLocked(displayId);
- if (displayContent != null) {
- setOverscanLocked(displayContent, left, top, right, bottom);
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized(mWindowMap) {
+ DisplayContent displayContent = getDisplayContentLocked(displayId);
+ if (displayContent != null) {
+ setOverscanLocked(displayContent, left, top, right, bottom);
+ }
}
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
}
&& !mWallpaperTarget.mWinAnimator.isDummyAnimation()
? null : mWallpaperTarget;
- // If there is a wallpaper target and the target is neither opening nor closing, then
- // there exists an app on top of the wallpaper target that has a translucent
- // background.
- // If the pending transition is an exit, we should add the wallpaper target to the list
- // of opening apps so that the translucent app on top of it will animate correctly.
- final AppWindowToken wallpaperTargetAppToken =
- mWallpaperTarget != null ? mWallpaperTarget.mAppToken : null;
- if (wallpaperTargetAppToken != null
- && !mClosingApps.contains(wallpaperTargetAppToken)
- && !mOpeningApps.contains(wallpaperTargetAppToken)
- && (transit & AppTransition.TRANSIT_EXIT_MASK) != 0) {
- mOpeningApps.add(wallpaperTargetAppToken);
- NN++;
- }
mInnerFields.mWallpaperMayChange = false;
// The top-most window will supply the layout params,
}
}
+ mAnimateWallpaperWithTarget = false;
if (closingAppHasWallpaper && openingAppHasWallpaper) {
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Wallpaper animation!");
switch (transit) {
break;
}
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit: " + transit);
- } else if ((oldWallpaper != null) && !mOpeningApps.contains(oldWallpaper.mAppToken)) {
+ } else if ((oldWallpaper != null) && !mOpeningApps.isEmpty()
+ && !mOpeningApps.contains(oldWallpaper.mAppToken)) {
// We are transitioning from an activity with
// a wallpaper to one without.
transit = AppTransition.TRANSIT_WALLPAPER_CLOSE;
transit = AppTransition.TRANSIT_WALLPAPER_OPEN;
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"New transit into wallpaper: " + transit);
+ } else {
+ mAnimateWallpaperWithTarget = true;
}
// If all closing windows are obscured, then there is
wtoken.mAppAnimator.clearThumbnail();
wtoken.inPendingTransaction = false;
wtoken.mAppAnimator.animation = null;
- setTokenVisibilityLocked(wtoken, animLp, false,
- transit, false);
+ setTokenVisibilityLocked(wtoken, animLp, false, transit, false);
wtoken.updateReportedVisibilityLocked();
wtoken.waitingToHide = false;
// Force the allDrawn flag, because we want to start
// Wallpapers are animated based on the "real" window they
// are currently targeting.
- if (mIsWallpaper && mService.mLowerWallpaperTarget == null
- && mService.mWallpaperTarget != null) {
- final WindowStateAnimator wallpaperAnimator = mService.mWallpaperTarget.mWinAnimator;
+ final WindowState wallpaperTarget = mService.mWallpaperTarget;
+ if (mIsWallpaper && wallpaperTarget != null && mService.mAnimateWallpaperWithTarget) {
+ final WindowStateAnimator wallpaperAnimator = wallpaperTarget.mWinAnimator;
if (wallpaperAnimator.mHasLocalTransformation &&
wallpaperAnimator.mAnimation != null &&
!wallpaperAnimator.mAnimation.getDetachWallpaper()) {
Slog.v(TAG, "WP target attached xform: " + attachedTransformation);
}
}
- final AppWindowAnimator wpAppAnimator = mAnimator.getWallpaperAppAnimator();
- if (wpAppAnimator != null && wpAppAnimator.hasTransformation
+ final AppWindowAnimator wpAppAnimator = wallpaperTarget.mAppToken == null ?
+ null : wallpaperTarget.mAppToken.mAppAnimator;
+ if (wpAppAnimator != null && wpAppAnimator.hasTransformation
&& wpAppAnimator.animation != null
&& !wpAppAnimator.animation.getDetachWallpaper()) {
appTransformation = wpAppAnimator.transformation;