diff options
158 files changed, 1862 insertions, 1151 deletions
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java index 57c1505..5ba7d50 100644 --- a/cmds/am/src/com/android/commands/am/Am.java +++ b/cmds/am/src/com/android/commands/am/Am.java @@ -48,6 +48,7 @@ import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; import android.text.TextUtils; @@ -726,6 +727,7 @@ public class Am extends BaseCommand { IActivityManager.WaitResult result = null; int res; + final long startTime = SystemClock.uptimeMillis(); if (mWaitOption) { result = mAm.startActivityAndWait(null, null, intent, mimeType, null, null, 0, mStartFlags, profilerInfo, null, mUserId); @@ -734,6 +736,7 @@ public class Am extends BaseCommand { res = mAm.startActivityAsUser(null, null, intent, mimeType, null, null, 0, mStartFlags, profilerInfo, null, mUserId); } + final long endTime = SystemClock.uptimeMillis(); PrintStream out = mWaitOption ? System.out : System.err; boolean launched = false; switch (res) { @@ -811,6 +814,7 @@ public class Am extends BaseCommand { if (result.totalTime >= 0) { System.out.println("TotalTime: " + result.totalTime); } + System.out.println("WaitTime: " + (endTime-startTime)); System.out.println("Complete"); } mRepeat--; diff --git a/cmds/dpm/src/com/android/commands/dpm/Dpm.java b/cmds/dpm/src/com/android/commands/dpm/Dpm.java index b8b2087..3b9a785 100644 --- a/cmds/dpm/src/com/android/commands/dpm/Dpm.java +++ b/cmds/dpm/src/com/android/commands/dpm/Dpm.java @@ -94,7 +94,7 @@ public final class Dpm extends BaseCommand { mDevicePolicyManager.removeActiveAdmin(component, UserHandle.USER_OWNER); throw e; } - System.out.println("Device owner set to package " + packageName); + System.out.println("Success: Device owner set to package " + packageName); System.out.println("Active admin set to component " + component.toShortString()); } @@ -113,8 +113,8 @@ public final class Dpm extends BaseCommand { mDevicePolicyManager.removeActiveAdmin(component, userId); throw e; } - System.out.println("Active admin and profile owner set to " + component.toShortString() + - " for user " + userId); + System.out.println("Success: Active admin and profile owner set to " + + component.toShortString() + " for user " + userId); } private ComponentName parseComponentName(String component) { diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 7c69a7d..e3cbef5 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -1402,6 +1402,20 @@ public class ConnectivityManager { return (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); } + /** {@hide */ + public static final void enforceTetherChangePermission(Context context) { + if (context.getResources().getStringArray( + com.android.internal.R.array.config_mobile_hotspot_provision_app).length == 2) { + // Have a provisioning app - must only let system apps (which check this app) + // turn on tethering + context.enforceCallingOrSelfPermission( + android.Manifest.permission.CONNECTIVITY_INTERNAL, "ConnectivityService"); + } else { + context.enforceCallingOrSelfPermission( + android.Manifest.permission.CHANGE_NETWORK_STATE, "ConnectivityService"); + } + } + /** * Get the set of tetherable, available interfaces. This list is limited by * device configuration and current interface existence. diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java index 54d43d3..ea5dfd1 100644 --- a/core/java/android/net/NetworkStats.java +++ b/core/java/android/net/NetworkStats.java @@ -24,6 +24,8 @@ import android.util.SparseBooleanArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; +import libcore.util.EmptyArray; + import java.io.CharArrayWriter; import java.io.PrintWriter; import java.util.Arrays; @@ -169,6 +171,15 @@ public class NetworkStats implements Parcelable { } else { // Special case for use by NetworkStatsFactory to start out *really* empty. this.capacity = 0; + this.iface = EmptyArray.STRING; + this.uid = EmptyArray.INT; + this.set = EmptyArray.INT; + this.tag = EmptyArray.INT; + this.rxBytes = EmptyArray.LONG; + this.rxPackets = EmptyArray.LONG; + this.txBytes = EmptyArray.LONG; + this.txPackets = EmptyArray.LONG; + this.operations = EmptyArray.LONG; } } diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index c25278f..82016c3 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -19,6 +19,7 @@ import android.annotation.SystemApi; import android.app.ActivityManager; import android.app.ActivityManagerNative; import android.content.Context; +import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Bitmap; @@ -430,7 +431,8 @@ public class UserManager { * @return whether the user making this call is a goat */ public boolean isUserAGoat() { - return false; + return mContext.getPackageManager() + .isPackageAvailable("com.coffeestainstudios.goatsimulator"); } /** diff --git a/core/java/android/service/voice/AlwaysOnHotwordDetector.java b/core/java/android/service/voice/AlwaysOnHotwordDetector.java index 8aa2689..ac7d539 100644 --- a/core/java/android/service/voice/AlwaysOnHotwordDetector.java +++ b/core/java/android/service/voice/AlwaysOnHotwordDetector.java @@ -170,8 +170,7 @@ public class AlwaysOnHotwordDetector { = SoundTrigger.RECOGNITION_MODE_USER_IDENTIFICATION; static final String TAG = "AlwaysOnHotwordDetector"; - // TODO: Set to false. - static final boolean DBG = true; + static final boolean DBG = false; private static final int STATUS_ERROR = SoundTrigger.STATUS_ERROR; private static final int STATUS_OK = SoundTrigger.STATUS_OK; @@ -575,7 +574,7 @@ public class AlwaysOnHotwordDetector { int code = STATUS_ERROR; try { code = mModelManagementService.startRecognition(mVoiceInteractionService, - mKeyphraseMetadata.id, mInternalCallback, + mKeyphraseMetadata.id, mLocale.toLanguageTag(), mInternalCallback, new RecognitionConfig(captureTriggerAudio, allowMultipleTriggers, recognitionExtra, null /* additional data */)); } catch (RemoteException e) { @@ -690,7 +689,7 @@ public class AlwaysOnHotwordDetector { if (availability == STATE_NOT_READY || availability == STATE_KEYPHRASE_UNENROLLED || availability == STATE_KEYPHRASE_ENROLLED) { - enrolled = internalGetIsEnrolled(mKeyphraseMetadata.id); + enrolled = internalGetIsEnrolled(mKeyphraseMetadata.id, mLocale); if (!enrolled) { availability = STATE_KEYPHRASE_UNENROLLED; } else { @@ -741,10 +740,10 @@ public class AlwaysOnHotwordDetector { /** * @return The corresponding {@link KeyphraseSoundModel} or null if none is found. */ - private boolean internalGetIsEnrolled(int keyphraseId) { + private boolean internalGetIsEnrolled(int keyphraseId, Locale locale) { try { return mModelManagementService.isEnrolledForKeyphrase( - mVoiceInteractionService, keyphraseId); + mVoiceInteractionService, keyphraseId, locale.toLanguageTag()); } catch (RemoteException e) { Slog.w(TAG, "RemoteException in listRegisteredKeyphraseSoundModels!", e); } diff --git a/core/java/android/transition/Fade.java b/core/java/android/transition/Fade.java index 1f9d093..e7857c0 100644 --- a/core/java/android/transition/Fade.java +++ b/core/java/android/transition/Fade.java @@ -145,12 +145,21 @@ public class Fade extends Visibility { private final View mView; private boolean mCanceled = false; private float mPausedAlpha = -1; + private boolean mLayerTypeChanged = false; public FadeAnimatorListener(View view) { mView = view; } @Override + public void onAnimationStart(Animator animator) { + if (mView.hasOverlappingRendering() && mView.getLayerType() == View.LAYER_TYPE_NONE) { + mLayerTypeChanged = true; + mView.setLayerType(View.LAYER_TYPE_HARDWARE, null); + } + } + + @Override public void onAnimationCancel(Animator animator) { mCanceled = true; if (mPausedAlpha >= 0) { @@ -163,6 +172,9 @@ public class Fade extends Visibility { if (!mCanceled) { mView.setTransitionAlpha(1); } + if (mLayerTypeChanged) { + mView.setLayerType(View.LAYER_TYPE_NONE, null); + } } @Override diff --git a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl index 22ec4be..5a10524 100644 --- a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl +++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl @@ -33,32 +33,44 @@ interface IVoiceInteractionManagerService { void finish(IBinder token); /** - * Lists the registered Sound model for keyphrase detection. - * May be null if no matching sound models exist. + * Gets the registered Sound model for keyphrase detection for the current user. + * May be null if no matching sound model exists. + * + * @param keyphraseId The unique identifier for the keyphrase. + * @param bcp47Locale The BCP47 language tag for the keyphrase's locale. */ - SoundTrigger.KeyphraseSoundModel getKeyphraseSoundModel(int keyphraseId); + SoundTrigger.KeyphraseSoundModel getKeyphraseSoundModel(int keyphraseId, in String bcp47Locale); /** - * Updates the given keyphrase sound model. Adds the model if it doesn't exist currently. + * Add/Update the given keyphrase sound model. */ int updateKeyphraseSoundModel(in SoundTrigger.KeyphraseSoundModel model); /** - * Deletes the given keyphrase sound model. + * Deletes the given keyphrase sound model for the current user. + * + * @param keyphraseId The unique identifier for the keyphrase. + * @param bcp47Locale The BCP47 language tag for the keyphrase's locale. */ - int deleteKeyphraseSoundModel(int keyphraseId); + int deleteKeyphraseSoundModel(int keyphraseId, in String bcp47Locale); /** - * Indicates if there's a keyphrase sound model available for the given keyphrase ID. - */ - boolean isEnrolledForKeyphrase(IVoiceInteractionService service, int keyphraseId); - /** * Gets the properties of the DSP hardware on this device, null if not present. */ SoundTrigger.ModuleProperties getDspModuleProperties(in IVoiceInteractionService service); /** + * Indicates if there's a keyphrase sound model available for the given keyphrase ID. + * This performs the check for the current user. + * + * @param service The current VoiceInteractionService. + * @param keyphraseId The unique identifier for the keyphrase. + * @param bcp47Locale The BCP47 language tag for the keyphrase's locale. + */ + boolean isEnrolledForKeyphrase(IVoiceInteractionService service, int keyphraseId, + String bcp47Locale); + /** * Starts a recognition for the given keyphrase. */ int startRecognition(in IVoiceInteractionService service, int keyphraseId, - in IRecognitionStatusCallback callback, + in String bcp47Locale, in IRecognitionStatusCallback callback, in SoundTrigger.RecognitionConfig recognitionConfig); /** * Stops a recognition for the given keyphrase. diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 107e8c6..22600de 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -491,8 +491,7 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } private boolean versionNumberAtLeastL(int versionNumber) { - // TODO: remove "|| true" once the build code for L is fixed. - return versionNumber >= Build.VERSION_CODES.L || true; + return versionNumber >= Build.VERSION_CODES.L; } private void setAlwaysButtonEnabled(boolean hasValidSelection, int checkedPos, diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java index a8f7bb3..2377c22 100644 --- a/core/java/com/android/internal/app/WindowDecorActionBar.java +++ b/core/java/com/android/internal/app/WindowDecorActionBar.java @@ -866,14 +866,7 @@ public class WindowDecorActionBar extends ActionBar implements mDecorToolbar.animateToVisibility(toActionMode ? View.GONE : View.VISIBLE); mContextView.animateToVisibility(toActionMode ? View.VISIBLE : View.GONE); - if (mTabScrollView != null && !mDecorToolbar.hasEmbeddedTabs() && - isCollapsed(mDecorToolbar.getViewGroup())) { - mTabScrollView.animateToVisibility(toActionMode ? View.GONE : View.VISIBLE); - } - } - - private boolean isCollapsed(View view) { - return view == null || view.getVisibility() == View.GONE || view.getMeasuredHeight() == 0; + // mTabScrollView's visibility is not affected by action mode. } public Context getThemedContext() { diff --git a/core/java/com/android/internal/widget/ActionBarContainer.java b/core/java/com/android/internal/widget/ActionBarContainer.java index d24f32f..847a47d 100644 --- a/core/java/com/android/internal/widget/ActionBarContainer.java +++ b/core/java/com/android/internal/widget/ActionBarContainer.java @@ -260,6 +260,11 @@ public class ActionBarContainer extends FrameLayout { return view == null || view.getVisibility() == GONE || view.getMeasuredHeight() == 0; } + private int getMeasuredHeightWithMargins(View view) { + final LayoutParams lp = (LayoutParams) view.getLayoutParams(); + return view.getMeasuredHeight() + lp.topMargin + lp.bottomMargin; + } + @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (mActionBarView == null && @@ -271,26 +276,23 @@ public class ActionBarContainer extends FrameLayout { if (mActionBarView == null) return; - int nonTabMaxHeight = 0; - final int childCount = getChildCount(); - for (int i = 0; i < childCount; i++) { - final View child = getChildAt(i); - if (child == mTabContainer) { - continue; - } - final LayoutParams lp = (LayoutParams) child.getLayoutParams(); - nonTabMaxHeight = Math.max(nonTabMaxHeight, isCollapsed(child) ? 0 : - child.getMeasuredHeight() + lp.topMargin + lp.bottomMargin); - } - if (mTabContainer != null && mTabContainer.getVisibility() != GONE) { - final int mode = MeasureSpec.getMode(heightMeasureSpec); - if (mode == MeasureSpec.AT_MOST) { - final int maxHeight = MeasureSpec.getSize(heightMeasureSpec); - setMeasuredDimension(getMeasuredWidth(), - Math.min(nonTabMaxHeight + mTabContainer.getMeasuredHeight(), - maxHeight)); + int nonTabMaxHeight = 0; + final int childCount = getChildCount(); + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + if (child == mTabContainer) { + continue; + } + nonTabMaxHeight = Math.max(nonTabMaxHeight, isCollapsed(child) ? 0 : + getMeasuredHeightWithMargins(child)); } + final int mode = MeasureSpec.getMode(heightMeasureSpec); + final int maxHeight = mode == MeasureSpec.AT_MOST ? + MeasureSpec.getSize(heightMeasureSpec) : Integer.MAX_VALUE; + setMeasuredDimension(getMeasuredWidth(), + Math.min(nonTabMaxHeight + getMeasuredHeightWithMargins(mTabContainer), + maxHeight)); } } @@ -303,8 +305,10 @@ public class ActionBarContainer extends FrameLayout { if (tabContainer != null && tabContainer.getVisibility() != GONE) { final int containerHeight = getMeasuredHeight(); + final LayoutParams lp = (LayoutParams) tabContainer.getLayoutParams(); final int tabHeight = tabContainer.getMeasuredHeight(); - tabContainer.layout(l, containerHeight - tabHeight, r, containerHeight); + tabContainer.layout(l, containerHeight - tabHeight - lp.bottomMargin, r, + containerHeight - lp.bottomMargin); } boolean needsInvalidate = false; diff --git a/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java b/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java index 63a4843..478c8f2 100644 --- a/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java +++ b/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java @@ -578,7 +578,7 @@ public class ToolbarWidgetWrapper implements DecorToolbar { @Override public void animateToVisibility(int visibility) { if (visibility == View.GONE) { - mToolbar.animate().translationY(mToolbar.getHeight()).alpha(0) + mToolbar.animate().alpha(0) .setListener(new AnimatorListenerAdapter() { private boolean mCanceled = false; @Override @@ -594,7 +594,7 @@ public class ToolbarWidgetWrapper implements DecorToolbar { } }); } else if (visibility == View.VISIBLE) { - mToolbar.animate().translationY(0).alpha(1) + mToolbar.animate().alpha(1) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { diff --git a/core/res/res/drawable/ic_corp_icon_badge.xml b/core/res/res/drawable/ic_corp_icon_badge.xml index 0b05bf5..538dade 100644 --- a/core/res/res/drawable/ic_corp_icon_badge.xml +++ b/core/res/res/drawable/ic_corp_icon_badge.xml @@ -19,27 +19,26 @@ Copyright (C) 2014 The Android Open Source Project android:viewportWidth="64.0" android:viewportHeight="64.0"> <path - android:pathData="M49.062000,50.000000m-14.000000,0.000000a14.000000,14.000000 0.000000,1.000000 1.000000,28.000000 0.000000a14.000000,14.000000 0.000000,1.000000 1.000000,-28.000000 0.000000" - android:fillColor="#FF000000"/> + android:fillColor="#FF000000" + android:pathData="M49.062,50.0m-14.0,0.0a14.0,14.0 0.0,1.0 1.0,28.0 0.0a14.0,14.0 0.0,1.0 1.0,-28.0 0.0" + android:fillAlpha="0.2"/> <path - android:pathData="M49.000000,49.500000m-14.000000,0.000000a14.000000,14.000000 0.000000,1.000000 1.000000,28.000000 0.000000a14.000000,14.000000 0.000000,1.000000 1.000000,-28.000000 0.000000" - android:fillColor="#FF000000"/> + android:fillColor="#FF000000" + android:pathData="M49.0,49.5m-14.0,0.0a14.0,14.0 0.0,1.0 1.0,28.0 0.0a14.0,14.0 0.0,1.0 1.0,-28.0 0.0" + android:fillAlpha="0.2"/> <path - android:pathData="M49.000000,49.000000m-14.000000,0.000000a14.000000,14.000000 0.000000,1.000000 1.000000,28.000000 0.000000a14.000000,14.000000 0.000000,1.000000 1.000000,-28.000000 0.000000" + android:pathData="M49.0,49.0m-14.0,0.0a14.0,14.0 0.0,1.0 1.0,28.0 0.0a14.0,14.0 0.0,1.0 1.0,-28.0 0.0" android:fillColor="#FF5722"/> <path - android:pathData="M55.250000,44.264000l-2.254000,0.000000l0.000000,-1.531000l-1.531000,-1.531000l-4.638000,0.000000l-1.531000,1.531000l0.000000,1.531000l-2.294000,0.000000c-0.846000,0.000000 -1.523000,0.685000 -1.523000,1.531000l-0.008000,8.421000c0.000000,0.846000 0.685000,1.531000 1.531000,1.531000L55.250000,55.746994c0.846000,0.000000 1.531000,-0.685000 1.531000,-1.531000l0.000000,-8.421000C56.782001,44.948002 56.097000,44.264000 55.250000,44.264000zM51.465000,44.264000l-4.638000,0.000000l0.000000,-1.531000l4.638000,0.000000L51.465000,44.264000z" + android:pathData="M55.801,43.688l-2.837,-0.001l0.0,-1.137l-1.587,-1.588l-4.72,-0.001l-1.588,1.587l0.0,1.137l-2.867,-0.001c-0.94,0.0 -1.691,0.76 -1.691,1.699L40.5,48.654c0.0,0.94 0.76,1.7 1.699,1.7l5.255,0.001l0.0,-1.271l0.225,0.0l2.589,0.0l0.225,0.0l0.0,1.271l5.303,0.001c0.939,0.0 1.7,-0.76 1.7,-1.699l0.002,-3.269C57.5,44.449 56.74,43.689 55.801,43.688zM51.377,43.687l-4.72,-0.001l0.0,-1.137l4.72,0.001L51.377,43.687z" android:fillColor="#FFFFFF"/> <path - android:pathData="M57.359001,45.373001c0.000000,-0.855000 -0.738000,-1.547000 -1.651000,-1.547000L42.535000,43.826000c-0.913000,0.000000 -1.643000,0.692000 -1.643000,1.547000l0.004000,3.232000c0.000000,0.911000 0.737000,1.648000 1.648000,1.648000l13.162000,0.000000c0.911000,0.000000 1.648000,-0.737000 1.648000,-1.648000L57.359001,45.373001z" + android:pathData="M50.494,52.012l-3.04,0.0l0.0,-0.901l-6.417,0.0l0.0,3.172c0.0,0.94 0.741,1.7 1.68,1.7l12.464,0.003c0.939,0.0 1.702,-0.76 1.703,-1.699l0.0,-3.176l-6.39,0.0L50.494,52.012z" android:fillColor="#FFFFFF"/> <path android:pathData="M40.726,40.726 h16.13 v16.13 h-16.13z" android:fillColor="#00000000"/> <path - android:pathData="M40.000000,49.000000l17.000000,0.000000l0.000000,2.000000l-17.000000,0.000000z" - android:fillColor="#FF5722"/> - <path - android:pathData="M47.625000,48.951000l3.003000,0.000000l0.000000,3.002000l-3.003000,0.000000z" - android:fillColor="#FF5722"/> + android:pathData="M46.657,42.55 h4.72 v1.137 h-4.72z" + android:fillColor="#00000000"/> </vector> diff --git a/core/res/res/drawable/ic_corp_statusbar_icon.xml b/core/res/res/drawable/ic_corp_statusbar_icon.xml new file mode 100644 index 0000000..e742c0b --- /dev/null +++ b/core/res/res/drawable/ic_corp_statusbar_icon.xml @@ -0,0 +1,30 @@ +<!-- +Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:pathData="M20.801,5.981L17.13,5.98l0.001,-1.471l-2.053,-2.055L8.969,2.453L6.915,4.506L6.914,5.977L3.203,5.976c-1.216,0.0 -2.189,0.983 -2.189,2.199L1.0,12.406c0.0,1.216 0.983,2.2 2.199,2.2L10.0,14.608l0.0,-1.644l0.291,0.0l3.351,0.0l0.291,0.0l0.0,1.645l6.863,0.002c1.216,0.0 2.2,-0.983 2.2,-2.199L23.0,8.181C23.0,6.965 22.017,5.981 20.801,5.981zM15.076,5.979L8.968,5.978l0.001,-1.471l6.108,0.001L15.076,5.979z" + android:fillColor="#FFFFFF"/> + <path + android:pathData="M13.911,16.646L9.978,16.646L9.978,15.48L1.673,15.48l0.0,4.105c0.0,1.216 0.959,2.2 2.175,2.2l16.13,0.004c1.216,0.0 2.203,-0.983 2.203,-2.199l0.0,-4.11l-8.27,0.0L13.910999,16.646z" + android:fillColor="#FFFFFF"/> + <path + android:pathData="M23.657,6.55 h4.72 v1.137 h-4.72z" + android:fillColor="#00000000"/> +</vector> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 4f906ff..59eef74 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -1203,8 +1203,7 @@ <string name="whichSendApplicationNamed" msgid="2799370240005424391">"Comparteix amb %1$s"</string> <string name="whichHomeApplication" msgid="4616420172727326782">"Selecciona una aplicació d\'inici"</string> <string name="alwaysUse" msgid="4583018368000610438">"Utilitza-ho de manera predeterminada per a aquesta acció."</string> - <!-- no translation found for use_a_different_app (8134926230585710243) --> - <skip /> + <string name="use_a_different_app" msgid="8134926230585710243">"Fes servir una altra aplicació"</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Esborra els paràmetres predeterminats a Configuració del sistema > Aplicacions > Baixades."</string> <string name="chooseActivity" msgid="7486876147751803333">"Tria una acció"</string> <string name="chooseUsbActivity" msgid="6894748416073583509">"Tria una aplicació per al dispositiu USB"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 85a8d80..448e072 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -1768,7 +1768,7 @@ <string name="lock_to_app_title" msgid="1682643873107812874">"از پین کردن صفحه استفاده شود؟"</string> <string name="lock_to_app_description" msgid="9076084599283282800">"پین کردن صفحه، نمایشگر را در یک نمای واحد قفل میکند.\n\nبرای خروج، کلیدهای بازگشت و برنامههای اخیر را همزمان لمس کنید و نگه دارید."</string> <string name="lock_to_app_description_accessible" msgid="2132076937479670601">"پین کردن صفحه، نمایشگر را در یک نمای واحد قفل میکند.\n\nبرای خروج، کلید برنامههای اخیر را لمس کنید و نگه دارید."</string> - <string name="lock_to_app_negative" msgid="2259143719362732728">"نه، سپاسگزارم"</string> + <string name="lock_to_app_negative" msgid="2259143719362732728">"خیر، سپاسگزارم"</string> <string name="lock_to_app_positive" msgid="7085139175671313864">"شروع"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"صفحه پین شد"</string> <string name="lock_to_app_exit" msgid="8598219838213787430">"پین صفحه برداشته شد"</string> diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml index d63be70..64d1f9e 100644 --- a/core/res/res/values-hy-rAM/strings.xml +++ b/core/res/res/values-hy-rAM/strings.xml @@ -1203,7 +1203,7 @@ <string name="whichSendApplicationNamed" msgid="2799370240005424391">"Տարածել ըստ %1$s"</string> <string name="whichHomeApplication" msgid="4616420172727326782">"Ընտրեք հիմնական հավելվածը"</string> <string name="alwaysUse" msgid="4583018368000610438">"Օգտագործել լռելյայն այս գործողության համար:"</string> - <string name="use_a_different_app" msgid="8134926230585710243">"Օգտագործել այլ ծրագիր"</string> + <string name="use_a_different_app" msgid="8134926230585710243">"Օգտագործել այլ հավելված"</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Մաքրել լռելյայնը Համակարգի կարգավորումներ > Ծրագրեր >Ներբեռնված էջից:"</string> <string name="chooseActivity" msgid="7486876147751803333">"Ընտրել գործողություն"</string> <string name="chooseUsbActivity" msgid="6894748416073583509">"Ընտրեք հավելված USB սարքի համար"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index a8c8f1c..f1691ef 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -211,7 +211,7 @@ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"שינוי הגדרות האודיו."</string> <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"השפעה על הסוללה"</string> <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"שימוש בתכונות שיכולות לרוקן את הסוללה במהירות."</string> - <string name="permgrouplab_calendar" msgid="5863508437783683902">"לוח שנה"</string> + <string name="permgrouplab_calendar" msgid="5863508437783683902">"יומן"</string> <string name="permgroupdesc_calendar" msgid="5777534316982184416">"גישה ישירה ללוח השנה ולאירועים."</string> <string name="permgrouplab_dictionary" msgid="4148597128843641379">"קריאת מילון משתמש"</string> <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"קריאת מילים במילון משתמש."</string> @@ -500,11 +500,11 @@ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"כתיבה בזרם החברתי שלך"</string> <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"מאפשר לאפליקציה להציג עדכונים חברתיים מהחברים שלך. היזהר בעת שיתוף מידע -- הדבר מאפשר לאפליקציה ליצור הודעות שעשויות להיראות כאילו שנשלחו מחבר. שים לב: ייתכן אישור זה לא נאכף בכל הרשתות החברתיות."</string> <string name="permlab_readCalendar" msgid="5972727560257612398">"קריאת אירועי יומן וגם מידע סודי"</string> - <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"מאפשר לאפליקציה לקרוא את כל אירועי לוח השנה המאוחסנים בטאבלט, כולל אלה של חברים ועמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשתף או לשמור את נתוני לוח השנה שלך, ללא התחשבות בסודיות או ברגישות."</string> - <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"מאפשר לאפליקציה לקרוא את כל אירועי לוח השנה המאוחסנים בטלפון, כולל אלה של חברים ועמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשתף או לשמור את נתוני לוח השנה שלך, ללא התחשבות בסודיות או ברגישות."</string> + <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"מאפשר לאפליקציה לקרוא את כל אירועי היומן המאוחסנים בטאבלט, כולל אלה של חברים ועמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשתף או לשמור את נתוני היומן שלך, ללא התחשבות בסודיות או ברגישות."</string> + <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"מאפשר לאפליקציה לקרוא את כל אירועי היומן המאוחסנים בטלפון, כולל אלה של חברים ועמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשתף או לשמור את נתוני היומן שלך, ללא התחשבות בסודיות או ברגישות."</string> <string name="permlab_writeCalendar" msgid="8438874755193825647">"הוספה ושינוי של אירועי יומן ושליחת דוא\"ל לאורחים ללא ידיעת הבעלים"</string> - <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"מאפשר לאפליקציה להוסיף, להסיר ולשנות אירועים שאתה יכול לשנות בטאבלט, כולל אלה של חברים או עמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשלוח הודעות הנראות כאילו שנשלחו מבעלי לוח שנה או לשנות אירועים ללא ידיעת הבעלים."</string> - <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"מאפשר לאפליקציה להוסיף, להסיר ולשנות אירועים שאתה יכול לשנות בטלפון, כולל אלה של חברים או עמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשלוח הודעות הנראות כאילו שנשלחו מבעלי לוח שנה או לשנות אירועים ללא ידיעת הבעלים."</string> + <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"מאפשר לאפליקציה להוסיף, להסיר ולשנות אירועים שאתה יכול לשנות בטאבלט, כולל אלה של חברים או עמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשלוח הודעות הנראות כאילו שנשלחו מבעלי יומן או לשנות אירועים ללא ידיעת הבעלים."</string> + <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"מאפשר לאפליקציה להוסיף, להסיר ולשנות אירועים שאתה יכול לשנות בטלפון, כולל אלה של חברים או עמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשלוח הודעות הנראות כאילו שנשלחו מבעלי יומן או לשנות אירועים ללא ידיעת הבעלים."</string> <string name="permlab_accessMockLocation" msgid="8688334974036823330">"צור מקורות מיקום מדומים לצורך בדיקה"</string> <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"צור מקורות מיקום מדומים לבדיקה, או התקן ספק מיקום חדש. פעולה זו מאפשרת לאפליקציה לעקוף את המיקום ו/או הסטטוס המוחזרים על ידי מקורות מיקום אחרים כמו GPS או ספקי מיקום."</string> <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"גישה לפקודות ספק מיקום נוספות"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 8b13e83..a67eeb9 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -397,8 +397,8 @@ <string name="permdesc_bindPrintService" msgid="7960067623209111135">"Ļauj īpašniekam izveidot savienojumu ar drukāšanas pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"izveidot savienojumu ar drukas spolētāja pakalpojumu"</string> <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"Ļauj īpašniekam izveidot savienojumu ar drukas spolētāja pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string> - <string name="permlab_bindNfcService" msgid="2752731300419410724">"Saistīt ar TDLS pakalpojumu"</string> - <string name="permdesc_bindNfcService" msgid="6120647629174066862">"Ļauj īpašniekam saistīt lietojumprogrammas, kas emulē TDLS kartes. Parastajām lietotnēm šī atļauja nav nepieciešama."</string> + <string name="permlab_bindNfcService" msgid="2752731300419410724">"Saistīt ar NFC pakalpojumu"</string> + <string name="permdesc_bindNfcService" msgid="6120647629174066862">"Ļauj īpašniekam saistīt lietojumprogrammas, kas emulē NFC kartes. Parastajām lietotnēm šī atļauja nav nepieciešama."</string> <string name="permlab_bindTextService" msgid="7358378401915287938">"saistīt ar īsziņu pakalpojumu"</string> <string name="permdesc_bindTextService" msgid="8151968910973998670">"Ļauj īpašniekam veikt saistīšanu ar īsziņu pakalpojuma augstākā līmeņa saskarni (piem., SpellCheckerService). Parastajām lietotnēm tas nekad nav nepieciešams."</string> <string name="permlab_bindVpnService" msgid="4708596021161473255">"saistīt ar VPN pakalpojumu"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 36465c9..746eb4f 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -1071,7 +1071,7 @@ </plurals> <plurals name="num_hours_ago"> <item quantity="one" msgid="9150797944610821849">"godzinę temu"</item> - <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> godzin temu"</item> + <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> godz. temu"</item> </plurals> <plurals name="last_num_days"> <item quantity="other" msgid="3069992808164318268">"Ostatnie (<xliff:g id="COUNT">%d</xliff:g>) dni"</item> @@ -1199,8 +1199,8 @@ <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Otwórz w aplikacji %1$s"</string> <string name="whichEditApplication" msgid="144727838241402655">"Edytuj w aplikacji"</string> <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edytuj w aplikacji %1$s"</string> - <string name="whichSendApplication" msgid="6902512414057341668">"Udostępnij w aplikacji"</string> - <string name="whichSendApplicationNamed" msgid="2799370240005424391">"Udostępnij w aplikacji %1$s"</string> + <string name="whichSendApplication" msgid="6902512414057341668">"Udostępnij przez"</string> + <string name="whichSendApplicationNamed" msgid="2799370240005424391">"Udostępnij przez %1$s"</string> <string name="whichHomeApplication" msgid="4616420172727326782">"Wybierz aplikację ekranu głównego"</string> <string name="alwaysUse" msgid="4583018368000610438">"Domyślne dla tej czynności"</string> <string name="use_a_different_app" msgid="8134926230585710243">"Użyj innej aplikacji"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 12c6661..48d4920 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -300,8 +300,8 @@ <string name="permdesc_receiveBluetoothMap" msgid="8656755936919466345">"Permite aplicației să primească și să proceseze mesaje MAP prin Bluetooth. Aceasta înseamnă că aplicația ar putea monitoriza sau șterge mesajele trimise pe dispozitiv fără a le afișa."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"preluare aplicaţii care rulează"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"Permite aplicaţiei să preia informaţiile despre activităţile care rulează în prezent şi care au rulat recent. În acest fel, aplicaţia poate descoperi informaţii despre aplicaţiile care sunt utilizate pe dispozitiv."</string> - <string name="permlab_startTasksFromRecents" msgid="8990073877885690623">"start a task from recents"</string> - <string name="permdesc_startTasksFromRecents" msgid="7382133554871222235">"Allows the app to use an ActivityManager.RecentTaskInfo object to launch a defunct task that was returned from ActivityManager.getRecentTaskList()."</string> + <string name="permlab_startTasksFromRecents" msgid="8990073877885690623">"începeți o sarcină din activități recente"</string> + <string name="permdesc_startTasksFromRecents" msgid="7382133554871222235">"Permite aplicației să utilizeze obiectul ActivityManager.RecentTaskInfo pentru a lansa o sarcină eșuată, readusă din ActivityManager.getRecentTaskList()."</string> <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"interacţiune între utilizatori"</string> <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"Permite aplicaţiei să efectueze acţiuni pentru diferiţi utilizatori pe dispozitiv. Aplicaţiile rău intenţionate pot utiliza această permisiune pentru a încălca protecţia între utilizatori."</string> <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"licenţă completă pentru interacţiune între utilizatori"</string> @@ -1766,8 +1766,8 @@ <string name="lock_to_app_toast_accessible" msgid="3340628918851844044">"Pentru a anula fixarea acestui ecran, atingeți și țineți apăsat pe Recente."</string> <string name="lock_to_app_toast_locked" msgid="8739004135132606329">"Ecranul este fixat. Anularea fixării nu este permisă de organizația dvs."</string> <string name="lock_to_app_title" msgid="1682643873107812874">"Utilizați fixarea ecranului?"</string> - <string name="lock_to_app_description" msgid="9076084599283282800">"Fixarea ecranului îl blochează pe acesta într-un display unic.\n\nPentru a ieși, atingeți și țineți apăsat pe Înapoi și Recente în același timp."</string> - <string name="lock_to_app_description_accessible" msgid="2132076937479670601">"Fixarea ecranului îl blochează pe acesta într-un display unic.\n\nPentru a ieși, atingeți și țineți apăsat Recente."</string> + <string name="lock_to_app_description" msgid="9076084599283282800">"Dacă fixați ecranul, rămâne o singură vizualizare.\n\nPentru a ieși, atingeți și țineți apăsat pe Înapoi și Recente în același timp."</string> + <string name="lock_to_app_description_accessible" msgid="2132076937479670601">"Dacă fixați ecranul, rămâne o singură vizualizare.\n\nPentru a ieși, atingeți și țineți apăsat pe Recente."</string> <string name="lock_to_app_negative" msgid="2259143719362732728">"NU, MULȚUMESC"</string> <string name="lock_to_app_positive" msgid="7085139175671313864">"PORNIȚI"</string> <string name="lock_to_app_start" msgid="6643342070839862795">"Ecran fixat"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 3a0e500..d2cee98 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -1213,9 +1213,9 @@ <string name="aerr_process" msgid="4507058997035697579">"Kwa bahati mbaya, mchakato wa <xliff:g id="PROCESS">%1$s</xliff:g> umekoma."</string> <string name="anr_title" msgid="4351948481459135709"></string> <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> haifanyi kazi.\n\nUnataka kuifunga?"</string> - <string name="anr_activity_process" msgid="5776209883299089767">"Shughuli <xliff:g id="ACTIVITY">%1$s</xliff:g> haijibu. \n\n Unataka kuifunga?"</string> - <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> haijibu. Unataka kufunga?"</string> - <string name="anr_process" msgid="6513209874880517125">"Mchakato <xliff:g id="PROCESS">%1$s</xliff:g> haijibu. \n\n Unataka kuifunga?"</string> + <string name="anr_activity_process" msgid="5776209883299089767">"Shughuli ya <xliff:g id="ACTIVITY">%1$s</xliff:g> haifanyi kazi.\n\nJe, ungependa kuifunga?"</string> + <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> haifanyi kazi. Je, ungependa kuifunga?"</string> + <string name="anr_process" msgid="6513209874880517125">"Mchakato wa <xliff:g id="PROCESS">%1$s</xliff:g> haufanyi kazi. \n\nJe, ungependa kuifunga?"</string> <string name="force_close" msgid="8346072094521265605">"Sawa"</string> <string name="report" msgid="4060218260984795706">"Ripoti"</string> <string name="wait" msgid="7147118217226317732">"Subiri"</string> diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml index 64638ba..2f17e75 100644 --- a/core/res/res/values-ur-rPK/strings.xml +++ b/core/res/res/values-ur-rPK/strings.xml @@ -1203,8 +1203,7 @@ <string name="whichSendApplicationNamed" msgid="2799370240005424391">"%1$s کے ساتھ اشتراک کریں"</string> <string name="whichHomeApplication" msgid="4616420172727326782">"ایک ہوم ایپ منتخب کریں"</string> <string name="alwaysUse" msgid="4583018368000610438">"اس کارروائی کیلئے بطور ڈیفالٹ استعمال کریں۔"</string> - <!-- no translation found for use_a_different_app (8134926230585710243) --> - <skip /> + <string name="use_a_different_app" msgid="8134926230585710243">"ایک مختلف ایپ استعمال کریں"</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"سسٹم ترتیبات > ایپس > ڈاؤن لوڈ کردہ میں ڈیفالٹ صاف کریں۔"</string> <string name="chooseActivity" msgid="7486876147751803333">"ایک کارروائی منتخب کریں"</string> <string name="chooseUsbActivity" msgid="6894748416073583509">"USB آلہ کیلئے ایک ایپ منتخب کریں"</string> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index e95d735..ef3f47e 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -355,9 +355,9 @@ <!-- Integer parameters of the wifi to cellular handover feature wifi should not stick to bad networks --> - <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz">-60</integer> + <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz">-82</integer> <integer translatable="false" name="config_wifi_framework_wifi_score_low_rssi_threshold_5GHz">-72</integer> - <integer translatable="false" name="config_wifi_framework_wifi_score_good_rssi_threshold_5GHz">-82</integer> + <integer translatable="false" name="config_wifi_framework_wifi_score_good_rssi_threshold_5GHz">-60</integer> <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz">-87</integer> <integer translatable="false" name="config_wifi_framework_wifi_score_low_rssi_threshold_24GHz">-77</integer> <integer translatable="false" name="config_wifi_framework_wifi_score_good_rssi_threshold_24GHz">-65</integer> @@ -1791,6 +1791,7 @@ <item>SUPL_PORT=7275</item> <item>NTP_SERVER=north-america.pool.ntp.org</item> <item>SUPL_VER=0x20000</item> + <item>SUPL_MODE=0x01</item> </string-array> <!-- If there is no preload VM number in the sim card, carriers such as diff --git a/core/res/res/values/dimens_material.xml b/core/res/res/values/dimens_material.xml index 2b49ba2..ac5890a 100644 --- a/core/res/res/values/dimens_material.xml +++ b/core/res/res/values/dimens_material.xml @@ -45,8 +45,8 @@ <dimen name="text_size_title_material_toolbar">@dimen/text_size_title_material</dimen> <dimen name="text_size_subtitle_material_toolbar">@dimen/text_size_subhead_material</dimen> <dimen name="text_size_menu_material">16sp</dimen> - <dimen name="text_size_body_2_material">16sp</dimen> - <dimen name="text_size_body_1_material">16sp</dimen> + <dimen name="text_size_body_2_material">14sp</dimen> + <dimen name="text_size_body_1_material">14sp</dimen> <dimen name="text_size_caption_material">12sp</dimen> <dimen name="text_size_button_material">14sp</dimen> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 9d77309..ea7188d 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1192,6 +1192,7 @@ <java-symbol type="drawable" name="ic_corp_badge" /> <java-symbol type="drawable" name="ic_corp_icon_badge" /> <java-symbol type="drawable" name="ic_corp_icon" /> + <java-symbol type="drawable" name="ic_corp_statusbar_icon" /> <java-symbol type="drawable" name="emulator_circular_window_overlay" /> <java-symbol type="drawable" name="sim_light_blue" /> diff --git a/core/res/res/values/themes_material.xml b/core/res/res/values/themes_material.xml index a984cfa..ebff965 100644 --- a/core/res/res/values/themes_material.xml +++ b/core/res/res/values/themes_material.xml @@ -316,6 +316,8 @@ please see themes_device_defaults.xml. <item name="actionBarStyle">@style/Widget.Material.ActionBar.Solid</item> <item name="actionBarSize">@dimen/action_bar_default_height_material</item> <item name="actionModePopupWindowStyle">@style/Widget.Material.PopupWindow.ActionMode</item> + <item name="actionMenuTextAppearance">@style/TextAppearance.Material.Widget.ActionBar.Menu</item> + <item name="actionMenuTextColor">?attr/textColorPrimary</item> <item name="actionBarWidgetTheme">@null</item> <item name="actionBarPopupTheme">@null</item> <item name="actionBarTheme">@style/ThemeOverlay.Material.ActionBar</item> diff --git a/core/tests/coretests/src/android/net/NetworkStatsTest.java b/core/tests/coretests/src/android/net/NetworkStatsTest.java index 6331964..9ee4e20 100644 --- a/core/tests/coretests/src/android/net/NetworkStatsTest.java +++ b/core/tests/coretests/src/android/net/NetworkStatsTest.java @@ -310,6 +310,16 @@ public class NetworkStatsTest extends TestCase { assertEquals(128L + 512L, clone.getTotalBytes()); } + public void testAddWhenEmpty() throws Exception { + final NetworkStats red = new NetworkStats(TEST_START, -1); + final NetworkStats blue = new NetworkStats(TEST_START, 5) + .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L) + .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L); + + // We're mostly checking that we don't crash + red.combineAllValues(blue); + } + private static void assertValues(NetworkStats stats, int index, String iface, int uid, int set, int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, long operations) { final NetworkStats.Entry entry = stats.getValues(index, null); diff --git a/data/keyboards/Vendor_0a5c_Product_8502.kl b/data/keyboards/Vendor_0a5c_Product_8502.kl deleted file mode 100644 index 2f07328..0000000 --- a/data/keyboards/Vendor_0a5c_Product_8502.kl +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright (C) 2013 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. - -# Rhodi - -key 304 BUTTON_A -key 305 BUTTON_B -key 307 BUTTON_X -key 308 BUTTON_Y -key 310 BUTTON_L1 -key 311 BUTTON_R1 -key 316 BUTTON_MODE -key 317 BUTTON_THUMBL -key 318 BUTTON_THUMBR - -key 158 BACK -key 172 HOME - -axis 0x00 X -axis 0x01 Y -axis 0x02 Z -axis 0x05 RZ -axis 0x09 RTRIGGER -axis 0x0a LTRIGGER -axis 0x10 HAT_X -axis 0x11 HAT_Y - -led 0x00 CONTROLLER_1 -led 0x01 CONTROLLER_2 -led 0x02 CONTROLLER_3 -led 0x03 CONTROLLER_4 diff --git a/data/sounds/AudioPackage10.mk b/data/sounds/AudioPackage10.mk index 68a87f2..5a5eea6 100644 --- a/data/sounds/AudioPackage10.mk +++ b/data/sounds/AudioPackage10.mk @@ -23,7 +23,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_48k.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn_48k.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord_48k.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery_48k.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/AudioPackage11.mk b/data/sounds/AudioPackage11.mk index f19ed30..0f85b33 100644 --- a/data/sounds/AudioPackage11.mk +++ b/data/sounds/AudioPackage11.mk @@ -23,7 +23,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_48k.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn_48k.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord_48k.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery_48k.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/AudioPackage12.mk b/data/sounds/AudioPackage12.mk index c13689d..4251332 100644 --- a/data/sounds/AudioPackage12.mk +++ b/data/sounds/AudioPackage12.mk @@ -12,8 +12,8 @@ ALARM_FILES := Argon Carbon Helium Krypton Neon Oxygen Osmium Platinum NOTIFICATION_FILES := Ariel Ceres Carme Elara Europa Iapetus Io Rhea Salacia Titan Tethys RINGTONE_FILES := Callisto Dione Ganymede Luna Oberon Phobos Sedna Titania Triton Umbriel EFFECT_FILES := Effect_Tick KeypressReturn KeypressInvalid KeypressDelete KeypressSpacebar KeypressStandard \ - camera_click camera_focus Dock Undock Lock Unlock Trusted -MATERIAL_EFFECT_FILES := VideoRecord LowBattery WirelessChargingStarted + camera_focus Dock Undock Lock Unlock Trusted +MATERIAL_EFFECT_FILES := camera_click VideoRecord LowBattery WirelessChargingStarted PRODUCT_COPY_FILES += $(foreach fn,$(ALARM_FILES),\ $(LOCAL_PATH)/alarms/ogg/$(fn).ogg:system/media/audio/alarms/$(fn).ogg) diff --git a/data/sounds/AudioPackage12_48.mk b/data/sounds/AudioPackage12_48.mk index 6d86baf..70e68d3 100644 --- a/data/sounds/AudioPackage12_48.mk +++ b/data/sounds/AudioPackage12_48.mk @@ -12,8 +12,8 @@ ALARM_FILES := Argon Carbon Helium Krypton Neon Oxygen Osmium Platinum NOTIFICATION_FILES := Ariel Ceres Carme Elara Europa Iapetus Io Rhea Salacia Titan Tethys RINGTONE_FILES := Callisto Dione Ganymede Luna Oberon Phobos Sedna Titania Triton Umbriel EFFECT_FILES := Effect_Tick KeypressReturn KeypressInvalid KeypressDelete KeypressSpacebar KeypressStandard \ - camera_click Lock Unlock Trusted -MATERIAL_EFFECT_FILES := VideoRecord LowBattery WirelessChargingStarted + Lock Unlock Trusted +MATERIAL_EFFECT_FILES := camera_click VideoRecord LowBattery WirelessChargingStarted # Alarms not yet available in 48 kHz PRODUCT_COPY_FILES += $(foreach fn,$(ALARM_FILES),\ @@ -34,4 +34,4 @@ PRODUCT_COPY_FILES += $(foreach fn,$(MATERIAL_EFFECT_FILES),\ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ - $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg
\ No newline at end of file + $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg diff --git a/data/sounds/AudioPackage13.mk b/data/sounds/AudioPackage13.mk index 9bbfa7f..cec7280 100644 --- a/data/sounds/AudioPackage13.mk +++ b/data/sounds/AudioPackage13.mk @@ -13,8 +13,8 @@ NOTIFICATION_FILES := Ariel Ceres Carme Elara Europa Iapetus Io Rhea Salacia Tit RINGTONE_FILES := Atria Callisto Dione Ganymede Luna Oberon Phobos Pyxis Sedna Titania Triton \ Umbriel EFFECT_FILES := Effect_Tick KeypressReturn KeypressInvalid KeypressDelete KeypressSpacebar KeypressStandard \ - camera_click camera_focus Dock Undock Lock Unlock Trusted -MATERIAL_EFFECT_FILES := VideoRecord WirelessChargingStarted LowBattery + camera_focus Dock Undock Lock Unlock Trusted +MATERIAL_EFFECT_FILES := camera_click VideoRecord WirelessChargingStarted LowBattery PRODUCT_COPY_FILES += $(foreach fn,$(ALARM_FILES),\ $(LOCAL_PATH)/alarms/material/ogg/$(fn).ogg:system/media/audio/alarms/$(fn).ogg) diff --git a/data/sounds/AudioPackage13_48.mk b/data/sounds/AudioPackage13_48.mk index b90cd00..d1b17c8 100644 --- a/data/sounds/AudioPackage13_48.mk +++ b/data/sounds/AudioPackage13_48.mk @@ -13,8 +13,8 @@ NOTIFICATION_FILES := Ariel Ceres Carme Elara Europa Iapetus Io Rhea Salacia Tit RINGTONE_FILES := Atria Callisto Dione Ganymede Luna Oberon Phobos Pyxis Sedna Titania Triton \ Umbriel EFFECT_FILES := Effect_Tick KeypressReturn KeypressInvalid KeypressDelete KeypressSpacebar KeypressStandard \ - camera_click Lock Unlock Trusted -MATERIAL_EFFECT_FILES := VideoRecord WirelessChargingStarted LowBattery + Lock Unlock Trusted +MATERIAL_EFFECT_FILES := camera_click VideoRecord WirelessChargingStarted LowBattery PRODUCT_COPY_FILES += $(foreach fn,$(ALARM_FILES),\ $(LOCAL_PATH)/alarms/material/ogg/$(fn)_48k.ogg:system/media/audio/alarms/$(fn).ogg) @@ -34,4 +34,4 @@ PRODUCT_COPY_FILES += $(foreach fn,$(MATERIAL_EFFECT_FILES),\ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ - $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg
\ No newline at end of file + $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg diff --git a/data/sounds/AudioPackage6.mk b/data/sounds/AudioPackage6.mk index 89b5f1b..c843fdc 100644 --- a/data/sounds/AudioPackage6.mk +++ b/data/sounds/AudioPackage6.mk @@ -19,7 +19,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/AudioPackage7.mk b/data/sounds/AudioPackage7.mk index 065fb84..ce82651 100644 --- a/data/sounds/AudioPackage7.mk +++ b/data/sounds/AudioPackage7.mk @@ -21,7 +21,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn_120.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/AudioPackage7alt.mk b/data/sounds/AudioPackage7alt.mk index 9c35a2e..db468f3 100644 --- a/data/sounds/AudioPackage7alt.mk +++ b/data/sounds/AudioPackage7alt.mk @@ -21,7 +21,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn_120.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg \ diff --git a/data/sounds/AudioPackage8.mk b/data/sounds/AudioPackage8.mk index 070381d..4112c18 100644 --- a/data/sounds/AudioPackage8.mk +++ b/data/sounds/AudioPackage8.mk @@ -23,7 +23,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/AudioPackage9.mk b/data/sounds/AudioPackage9.mk index 0673811..1b430c0 100644 --- a/data/sounds/AudioPackage9.mk +++ b/data/sounds/AudioPackage9.mk @@ -23,7 +23,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/effects/ogg/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \ $(LOCAL_PATH)/effects/ogg/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \ $(LOCAL_PATH)/effects/material/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ - $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ + $(LOCAL_PATH)/effects/material/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \ $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \ $(LOCAL_PATH)/effects/material/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \ diff --git a/data/sounds/effects/material/ogg/camera_click.ogg b/data/sounds/effects/material/ogg/camera_click.ogg Binary files differnew file mode 100644 index 0000000..2528ef6 --- /dev/null +++ b/data/sounds/effects/material/ogg/camera_click.ogg diff --git a/data/sounds/effects/material/ogg/camera_click_48k.ogg b/data/sounds/effects/material/ogg/camera_click_48k.ogg Binary files differnew file mode 100644 index 0000000..01f3a05 --- /dev/null +++ b/data/sounds/effects/material/ogg/camera_click_48k.ogg diff --git a/docs/html/google/play/billing/index.jd b/docs/html/google/play/billing/index.jd index e1326d7..bdbf5c7 100644 --- a/docs/html/google/play/billing/index.jd +++ b/docs/html/google/play/billing/index.jd @@ -14,6 +14,7 @@ and features, and more. You can use In-app Billing to sell products as</p> <div class="sidebox"> <h2><strong>New in In-App Billing</strong></h2> <ul> + <li><strong>IAB v2 shutdown</strong>—In-app Billing v2 API is deprecated and will be shut down in January 2015. If your app is still using In-app Billing v2, please migrate to the v3 API as soon as possible.</li> <li><strong>Seasonal subscriptions</strong>—You can now set up a recurring <a href="billing_subscriptions.html#user-billing">seasonal subscription</a> that starts and ends on the same date each year (for @@ -41,7 +42,7 @@ and features, and more. You can use In-app Billing to sell products as</p> <ul> <li>Standard in-app products (one-time billing), or</li> -<li>Subscriptions, (recurring, automated billing)</li> +<li>Subscriptions (recurring, automated billing)</li> </ul> <p>When you use the in-app billing service to sell an item, diff --git a/docs/html/google/play/billing/v2/api.jd b/docs/html/google/play/billing/v2/api.jd index 9501555..36a9017 100644 --- a/docs/html/google/play/billing/v2/api.jd +++ b/docs/html/google/play/billing/v2/api.jd @@ -2,7 +2,28 @@ page.title=In-app Billing Version 2 excludeFromSuggestions=true @jd:body -<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div> +<p class="caution" style= +"background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;"> + The <strong>In-app Billing Version 2 API</strong> has been deprecated in + favor of the Version 3 API. If your app is using In-app Billing, please + <strong>make sure that it is using the Version 3 API</strong>. If your app is + still using the Version 2 API, you must <strong>migrate to the Version 3 API + as soon as possible</strong>.<br> + <br> + We plan to turn off the In-app Billing Version 2 service on <strong>January + 27, 2015</strong>, after which time users will <strong>no longer be able to + purchase in-app items and subscriptions through the Version 2 API</strong>. + We strongly encourage and recommend you migrate your apps to use Version 3 + API by November 2014, to provide ample time for users to update their apps to + the new version.<br> + <br> + For more information, please see the <a href= + "http://support.google.com/googleplay/android-developer/answer/6090268">Help Center + article</a>. For common questions about transitioning your implementation to + In-app Billing Version 3, please see <a href= + "{@docRoot}google/play/billing/billing_overview.html#migration">Migration + Considerations</a>. +</p> <div id="qv-wrapper" style="margin-top:0;"> <div id="qv"> diff --git a/docs/html/google/play/billing/v2/billing_integrate.jd b/docs/html/google/play/billing/v2/billing_integrate.jd index 5eb17d5..c264271 100644 --- a/docs/html/google/play/billing/v2/billing_integrate.jd +++ b/docs/html/google/play/billing/v2/billing_integrate.jd @@ -2,7 +2,28 @@ page.title=Implementing In-app Billing <span style="font-size:16px;">(IAB Versio excludeFromSuggestions=true @jd:body -<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div> +<p class="caution" style= +"background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;"> + The <strong>In-app Billing Version 2 API</strong> has been deprecated in + favor of the Version 3 API. If your app is using In-app Billing, please + <strong>make sure that it is using the Version 3 API</strong>. If your app is + still using the Version 2 API, you must <strong>migrate to the Version 3 API + as soon as possible</strong>.<br> + <br> + We plan to turn off the In-app Billing Version 2 service on <strong>January + 27, 2015</strong>, after which time users will <strong>no longer be able to + purchase in-app items and subscriptions through the Version 2 API</strong>. + We strongly encourage and recommend you migrate your apps to use Version 3 + API by November 2014, to provide ample time for users to update their apps to + the new version.<br> + <br> + For more information, please see the <a href= + "http://support.google.com/googleplay/android-developer/answer/6090268">Help Center + article</a>. For common questions about transitioning your implementation to + In-app Billing Version 3, please see <a href= + "{@docRoot}google/play/billing/billing_overview.html#migration">Migration + Considerations</a>. +</p> <div id="qv-wrapper" style="margin-top:0;"> <div id="qv"> <h2>In this document</h2> diff --git a/docs/html/google/play/billing/v2/billing_reference.jd b/docs/html/google/play/billing/v2/billing_reference.jd index 4587dee..32e00cf 100644 --- a/docs/html/google/play/billing/v2/billing_reference.jd +++ b/docs/html/google/play/billing/v2/billing_reference.jd @@ -2,7 +2,28 @@ page.title=In-app Billing Reference <span style="font-size:16px;">(IAB Version 2 excludeFromSuggestions=true @jd:body -<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div> +<p class="caution" style= +"background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;"> + The <strong>In-app Billing Version 2 API</strong> has been deprecated in + favor of the Version 3 API. If your app is using In-app Billing, please + <strong>make sure that it is using the Version 3 API</strong>. If your app is + still using the Version 2 API, you must <strong>migrate to the Version 3 API + as soon as possible</strong>.<br> + <br> + We plan to turn off the In-app Billing Version 2 service on <strong>January + 27, 2015</strong>, after which time users will <strong>no longer be able to + purchase in-app items and subscriptions through the Version 2 API</strong>. + We strongly encourage and recommend you migrate your apps to use Version 3 + API by November 2014, to provide ample time for users to update their apps to + the new version.<br> + <br> + For more information, please see the <a href= + "http://support.google.com/googleplay/android-developer/answer/6090268">Help Center + article</a>. For common questions about transitioning your implementation to + In-app Billing Version 3, please see <a href= + "{@docRoot}google/play/billing/billing_overview.html#migration">Migration + Considerations</a>. +</p> <div id="qv-wrapper" style="margin-top:0;"> <div id="qv"> <h2>In this document</h2> diff --git a/docs/html/google/play/billing/v2/billing_subscriptions.jd b/docs/html/google/play/billing/v2/billing_subscriptions.jd index f8051a9..01e39ac 100644 --- a/docs/html/google/play/billing/v2/billing_subscriptions.jd +++ b/docs/html/google/play/billing/v2/billing_subscriptions.jd @@ -2,7 +2,28 @@ page.title=Implementing Subscriptions <span style="font-size:16px;">(IAB Versio excludeFromSuggestions=true @jd:body -<div style="background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;">In-app Billing Version 2 is superseded. Please <a href="{@docRoot}google/play/billing/billing_overview.html#migration">migrate to Version 3</a> at your earliest convenience.</div> +<p class="caution" style= +"background-color:#fffdeb;width:100%;margin-bottom:1em;padding:.5em;"> + The <strong>In-app Billing Version 2 API</strong> has been deprecated in + favor of the Version 3 API. If your app is using In-app Billing, please + <strong>make sure that it is using the Version 3 API</strong>. If your app is + still using the Version 2 API, you must <strong>migrate to the Version 3 API + as soon as possible</strong>.<br> + <br> + We plan to turn off the In-app Billing Version 2 service on <strong>January + 27, 2015</strong>, after which time users will <strong>no longer be able to + purchase in-app items and subscriptions through the Version 2 API</strong>. + We strongly encourage and recommend you migrate your apps to use Version 3 + API by November 2014, to provide ample time for users to update their apps to + the new version.<br> + <br> + For more information, please see the <a href= + "http://support.google.com/googleplay/android-developer/answer/6090268">Help Center + article</a>. For common questions about transitioning your implementation to + In-app Billing Version 3, please see <a href= + "{@docRoot}google/play/billing/billing_overview.html#migration">Migration + Considerations</a>. +</p> <div id="qv-wrapper" style="margin-top:0;"> <div id="qv"> <h2>In this document</h2> diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h index feaee8e..7eb9a32 100644 --- a/libs/hwui/Properties.h +++ b/libs/hwui/Properties.h @@ -227,7 +227,7 @@ enum DebugLevel { #define DEFAULT_PATCH_CACHE_SIZE 128 // in kB #define DEFAULT_GRADIENT_CACHE_SIZE 0.5f #define DEFAULT_DROP_SHADOW_CACHE_SIZE 2.0f -#define DEFAULT_FBO_CACHE_SIZE 16 +#define DEFAULT_FBO_CACHE_SIZE 0 #define DEFAULT_TEXTURE_CACHE_FLUSH_RATE 0.6f diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 5e6796c..832d170 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -91,7 +91,9 @@ void CanvasContext::setSurface(ANativeWindow* window) { } void CanvasContext::swapBuffers() { - mEglManager.swapBuffers(mEglSurface); + if (CC_UNLIKELY(!mEglManager.swapBuffers(mEglSurface))) { + setSurface(NULL); + } mHaveNewSurface = false; } @@ -102,8 +104,8 @@ void CanvasContext::requireSurface() { } bool CanvasContext::initialize(ANativeWindow* window) { - if (mCanvas) return false; setSurface(window); + if (mCanvas) return false; mCanvas = new OpenGLRenderer(mRenderThread.renderState()); mCanvas->initProperties(); return true; diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp index e030cdb..a87834e 100644 --- a/libs/hwui/renderthread/EglManager.cpp +++ b/libs/hwui/renderthread/EglManager.cpp @@ -254,11 +254,23 @@ void EglManager::beginFrame(EGLSurface surface, EGLint* width, EGLint* height) { eglBeginFrame(mEglDisplay, surface); } -void EglManager::swapBuffers(EGLSurface surface) { +bool EglManager::swapBuffers(EGLSurface surface) { eglSwapBuffers(mEglDisplay, surface); EGLint err = eglGetError(); - LOG_ALWAYS_FATAL_IF(err != EGL_SUCCESS, - "Encountered EGL error %d %s during rendering", err, egl_error_str(err)); + if (CC_LIKELY(err == EGL_SUCCESS)) { + return true; + } + if (err == EGL_BAD_SURFACE) { + // For some reason our surface was destroyed out from under us + // This really shouldn't happen, but if it does we can recover easily + // by just not trying to use the surface anymore + ALOGW("swapBuffers encountered EGL_BAD_SURFACE on %p, halting rendering...", surface); + return false; + } + LOG_ALWAYS_FATAL("Encountered EGL error %d %s during rendering", + err, egl_error_str(err)); + // Impossible to hit this, but the compiler doesn't know that + return false; } bool EglManager::enableDirtyRegions(EGLSurface surface) { diff --git a/libs/hwui/renderthread/EglManager.h b/libs/hwui/renderthread/EglManager.h index a844cfc..71213fb 100644 --- a/libs/hwui/renderthread/EglManager.h +++ b/libs/hwui/renderthread/EglManager.h @@ -47,7 +47,7 @@ public: // Returns true if the current surface changed, false if it was already current bool makeCurrent(EGLSurface surface); void beginFrame(EGLSurface surface, EGLint* width, EGLint* height); - void swapBuffers(EGLSurface surface); + bool swapBuffers(EGLSurface surface); bool enableDirtyRegions(EGLSurface surface); diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java index 2c805bb..0445869 100644 --- a/location/java/android/location/LocationManager.java +++ b/location/java/android/location/LocationManager.java @@ -18,6 +18,7 @@ package android.location; import com.android.internal.location.ProviderProperties; +import android.annotation.SystemApi; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; @@ -808,6 +809,7 @@ public class LocationManager { * * @hide */ + @SystemApi public void requestLocationUpdates(LocationRequest request, LocationListener listener, Looper looper) { checkListener(listener); @@ -835,6 +837,7 @@ public class LocationManager { * * @hide */ + @SystemApi public void requestLocationUpdates(LocationRequest request, PendingIntent intent) { checkPendingIntent(intent); requestLocationUpdates(request, null, null, intent); diff --git a/packages/PrintSpooler/res/values-es-rUS/strings.xml b/packages/PrintSpooler/res/values-es-rUS/strings.xml index 167f7d8..e194f55 100644 --- a/packages/PrintSpooler/res/values-es-rUS/strings.xml +++ b/packages/PrintSpooler/res/values-es-rUS/strings.xml @@ -38,7 +38,7 @@ <string name="print_dialog" msgid="32628687461331979">"Cuadro de diálogo de impresión"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> <string name="page_description_template" msgid="6831239682256197161">"Página <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> de <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <string name="summary_template" msgid="8899734908625669193">"Resumen, <xliff:g id="COPIES">%1$s</xliff:g> copias, tamaño de papel <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="summary_template" msgid="8899734908625669193">"Resumen, copias <xliff:g id="COPIES">%1$s</xliff:g>, tamaño de papel <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> <string name="expand_handle" msgid="7282974448109280522">"Controlador para expandir"</string> <string name="collapse_handle" msgid="6886637989442507451">"Controlador para contraer"</string> <string name="print_button" msgid="645164566271246268">"Imprimir"</string> diff --git a/packages/PrintSpooler/res/values-eu-rES/strings.xml b/packages/PrintSpooler/res/values-eu-rES/strings.xml index b2c2b9c..4f0f8fc 100644 --- a/packages/PrintSpooler/res/values-eu-rES/strings.xml +++ b/packages/PrintSpooler/res/values-eu-rES/strings.xml @@ -43,8 +43,8 @@ <string name="collapse_handle" msgid="6886637989442507451">"Tolestu heldulekua"</string> <string name="print_button" msgid="645164566271246268">"Inprimatu"</string> <string name="savetopdf_button" msgid="2976186791686924743">"Gorde PDF gisa"</string> - <string name="print_options_expanded" msgid="6944679157471691859">"Inprimaketa-aukerak zabalduta daude"</string> - <string name="print_options_collapsed" msgid="7455930445670414332">"Inprimaketa-aukerak tolestuta daude"</string> + <string name="print_options_expanded" msgid="6944679157471691859">"Inprimatzeko aukerak zabalduta daude"</string> + <string name="print_options_collapsed" msgid="7455930445670414332">"Inprimatzeko aukerak tolestuta daude"</string> <string name="search" msgid="5421724265322228497">"Bilatu"</string> <string name="all_printers_label" msgid="3178848870161526399">"Inprimagailu guztiak"</string> <string name="add_print_service_label" msgid="5356702546188981940">"Gehitu zerbitzua"</string> diff --git a/packages/PrintSpooler/res/values-lo-rLA/strings.xml b/packages/PrintSpooler/res/values-lo-rLA/strings.xml index 349ac31..3a3f6bb 100644 --- a/packages/PrintSpooler/res/values-lo-rLA/strings.xml +++ b/packages/PrintSpooler/res/values-lo-rLA/strings.xml @@ -37,9 +37,9 @@ <string name="all_printers" msgid="5018829726861876202">"ທຸກເຄື່ອງພິມ..."</string> <string name="print_dialog" msgid="32628687461331979">"ໜ້າຕ່າງການພິມ"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <string name="page_description_template" msgid="6831239682256197161">"ໜ້າທີ <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> ໃນ <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <string name="summary_template" msgid="8899734908625669193">"ສະຫຼຸບ, ສໍາເນົາ <xliff:g id="COPIES">%1$s</xliff:g> , ຂະຫນາດ <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> - <string name="expand_handle" msgid="7282974448109280522">"ຂະຫຍາຍໂຕຈັບ"</string> + <string name="page_description_template" msgid="6831239682256197161">"ໜ້າທີ <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> ຈາກທັງໝົດ <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> + <string name="summary_template" msgid="8899734908625669193">"ສະຫຼຸບ, ສໍາເນົາ <xliff:g id="COPIES">%1$s</xliff:g>, ຂະຫນາດ <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="expand_handle" msgid="7282974448109280522">"ຂະຫຍາຍໂຕຈັດການ"</string> <string name="collapse_handle" msgid="6886637989442507451">"ປິດໂຕຈັດການ"</string> <string name="print_button" msgid="645164566271246268">"ພິມ"</string> <string name="savetopdf_button" msgid="2976186791686924743">"ບັນທຶກເປັນ PDF"</string> diff --git a/packages/PrintSpooler/res/values-pt-rPT/strings.xml b/packages/PrintSpooler/res/values-pt-rPT/strings.xml index d115b29..7b47f4c 100644 --- a/packages/PrintSpooler/res/values-pt-rPT/strings.xml +++ b/packages/PrintSpooler/res/values-pt-rPT/strings.xml @@ -38,7 +38,7 @@ <string name="print_dialog" msgid="32628687461331979">"Caixa de diálogo de impressão"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> <string name="page_description_template" msgid="6831239682256197161">"Página <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> de <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <string name="summary_template" msgid="8899734908625669193">"Resumo, cópias <xliff:g id="COPIES">%1$s</xliff:g>, tamanho do papel <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="summary_template" msgid="8899734908625669193">"Resumo, <xliff:g id="COPIES">%1$s</xliff:g> cópias, tamanho do papel <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> <string name="expand_handle" msgid="7282974448109280522">"Expandir alça"</string> <string name="collapse_handle" msgid="6886637989442507451">"Fechar alça"</string> <string name="print_button" msgid="645164566271246268">"Imprimir"</string> diff --git a/packages/PrintSpooler/res/values-ro/strings.xml b/packages/PrintSpooler/res/values-ro/strings.xml index 3f5cb3c..1446a53 100644 --- a/packages/PrintSpooler/res/values-ro/strings.xml +++ b/packages/PrintSpooler/res/values-ro/strings.xml @@ -37,21 +37,14 @@ <string name="all_printers" msgid="5018829726861876202">"Toate imprimantele..."</string> <string name="print_dialog" msgid="32628687461331979">"Caseta de dialog de printare"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <!-- no translation found for page_description_template (6831239682256197161) --> - <skip /> - <!-- no translation found for summary_template (8899734908625669193) --> - <skip /> - <!-- no translation found for expand_handle (7282974448109280522) --> - <skip /> - <!-- no translation found for collapse_handle (6886637989442507451) --> - <skip /> + <string name="page_description_template" msgid="6831239682256197161">"Pagina <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> din <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> + <string name="summary_template" msgid="8899734908625669193">"Rezumat, copii <xliff:g id="COPIES">%1$s</xliff:g>, dimensiunea paginii <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="expand_handle" msgid="7282974448109280522">"Ghidaj de extindere"</string> + <string name="collapse_handle" msgid="6886637989442507451">"Ghidaj de restrângere"</string> <string name="print_button" msgid="645164566271246268">"Printați"</string> - <!-- no translation found for savetopdf_button (2976186791686924743) --> - <skip /> - <!-- no translation found for print_options_expanded (6944679157471691859) --> - <skip /> - <!-- no translation found for print_options_collapsed (7455930445670414332) --> - <skip /> + <string name="savetopdf_button" msgid="2976186791686924743">"Salvați în format PDF"</string> + <string name="print_options_expanded" msgid="6944679157471691859">"Opțiuni de printare extinse"</string> + <string name="print_options_collapsed" msgid="7455930445670414332">"Opțiuni de printare restrânse"</string> <string name="search" msgid="5421724265322228497">"Căutați"</string> <string name="all_printers_label" msgid="3178848870161526399">"Toate imprimantele"</string> <string name="add_print_service_label" msgid="5356702546188981940">"Adăugați un serviciu"</string> diff --git a/packages/PrintSpooler/res/values-zh-rCN/strings.xml b/packages/PrintSpooler/res/values-zh-rCN/strings.xml index 7a000c5..77ecb21 100644 --- a/packages/PrintSpooler/res/values-zh-rCN/strings.xml +++ b/packages/PrintSpooler/res/values-zh-rCN/strings.xml @@ -37,21 +37,14 @@ <string name="all_printers" msgid="5018829726861876202">"所有打印机…"</string> <string name="print_dialog" msgid="32628687461331979">"打印对话框"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> / <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> - <!-- no translation found for page_description_template (6831239682256197161) --> - <skip /> - <!-- no translation found for summary_template (8899734908625669193) --> - <skip /> - <!-- no translation found for expand_handle (7282974448109280522) --> - <skip /> - <!-- no translation found for collapse_handle (6886637989442507451) --> - <skip /> + <string name="page_description_template" msgid="6831239682256197161">"第<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>页,共<xliff:g id="PAGE_COUNT">%2$d</xliff:g>页"</string> + <string name="summary_template" msgid="8899734908625669193">"摘要,<xliff:g id="COPIES">%1$s</xliff:g>份,纸张尺寸为<xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="expand_handle" msgid="7282974448109280522">"展开手柄"</string> + <string name="collapse_handle" msgid="6886637989442507451">"收起手柄"</string> <string name="print_button" msgid="645164566271246268">"打印"</string> - <!-- no translation found for savetopdf_button (2976186791686924743) --> - <skip /> - <!-- no translation found for print_options_expanded (6944679157471691859) --> - <skip /> - <!-- no translation found for print_options_collapsed (7455930445670414332) --> - <skip /> + <string name="savetopdf_button" msgid="2976186791686924743">"保存为PDF格式"</string> + <string name="print_options_expanded" msgid="6944679157471691859">"已展开打印选项"</string> + <string name="print_options_collapsed" msgid="7455930445670414332">"已收起打印选项"</string> <string name="search" msgid="5421724265322228497">"搜索"</string> <string name="all_printers_label" msgid="3178848870161526399">"所有打印机"</string> <string name="add_print_service_label" msgid="5356702546188981940">"添加服务"</string> diff --git a/packages/PrintSpooler/res/values-zh-rTW/strings.xml b/packages/PrintSpooler/res/values-zh-rTW/strings.xml index eb28f8a..3e26a5e 100644 --- a/packages/PrintSpooler/res/values-zh-rTW/strings.xml +++ b/packages/PrintSpooler/res/values-zh-rTW/strings.xml @@ -38,7 +38,7 @@ <string name="print_dialog" msgid="32628687461331979">"印表機對話方塊"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> <string name="page_description_template" msgid="6831239682256197161">"第 <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> 頁,共 <xliff:g id="PAGE_COUNT">%2$d</xliff:g> 頁"</string> - <string name="summary_template" msgid="8899734908625669193">"摘要,<xliff:g id="COPIES">%1$s</xliff:g> 份,<xliff:g id="PAPER_SIZE">%2$s</xliff:g> 紙張大小"</string> + <string name="summary_template" msgid="8899734908625669193">"摘要,<xliff:g id="COPIES">%1$s</xliff:g> 份,紙張為 <xliff:g id="PAPER_SIZE">%2$s</xliff:g> 大小"</string> <string name="expand_handle" msgid="7282974448109280522">"展開控點"</string> <string name="collapse_handle" msgid="6886637989442507451">"收合控點"</string> <string name="print_button" msgid="645164566271246268">"列印"</string> diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java b/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java index 14c41da..a4555f1 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java +++ b/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java @@ -64,9 +64,6 @@ public final class PageContentRepository { private final CloseGuard mCloseGuard = CloseGuard.get(); - private final ArrayMap<Integer, PageContentProvider> mPageContentProviders = - new ArrayMap<>(); - private final AsyncRenderer mRenderer; private RenderSpec mLastRenderSpec; @@ -141,10 +138,6 @@ public final class PageContentRepository { return mRenderer.getPageCount(); } - public PageContentProvider peekPageContentProvider(int pageIndex) { - return mPageContentProviders.get(pageIndex); - } - public PageContentProvider acquirePageContentProvider(int pageIndex, View owner) { throwIfDestroyed(); @@ -152,15 +145,7 @@ public final class PageContentRepository { Log.i(LOG_TAG, "Acquiring provider for page: " + pageIndex); } - if (mPageContentProviders.get(pageIndex)!= null) { - throw new IllegalStateException("Already acquired for page: " + pageIndex); - } - - PageContentProvider provider = new PageContentProvider(pageIndex, owner); - - mPageContentProviders.put(pageIndex, provider); - - return provider; + return new PageContentProvider(pageIndex, owner); } public void releasePageContentProvider(PageContentProvider provider) { @@ -170,10 +155,6 @@ public final class PageContentRepository { Log.i(LOG_TAG, "Releasing provider for page: " + provider.mPageIndex); } - if (mPageContentProviders.remove(provider.mPageIndex) == null) { - throw new IllegalStateException("Not acquired"); - } - provider.cancelLoad(); } @@ -526,7 +507,7 @@ public final class PageContentRepository { callback.run(); } } - }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null); + }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); } public void close(final Runnable callback) { @@ -552,7 +533,7 @@ public final class PageContentRepository { callback.run(); } } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null); + }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); } public void destroy() { @@ -571,7 +552,7 @@ public final class PageContentRepository { mPageContentCache.invalidate(); mPageContentCache.clear(); } - }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null); + }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); } public void startPreload(int firstShownPage, int lastShownPage, RenderSpec renderSpec) { @@ -687,7 +668,7 @@ public final class PageContentRepository { // Oh well, we will have work to do... renderTask = new RenderPageTask(pageIndex, renderSpec, callback); mPageToRenderTaskMap.put(pageIndex, renderTask); - renderTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null); + renderTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); } public void cancelRendering(int pageIndex) { diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java index 369c453..da8160a 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java @@ -274,9 +274,7 @@ public final class PageAdapter extends Adapter implements @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View page = mLayoutInflater.inflate(R.layout.preview_page, parent, false); - ViewHolder holder = new MyViewHolder(page); - holder.setIsRecyclable(true); - return holder; + return new MyViewHolder(page); } @Override @@ -314,14 +312,8 @@ public final class PageAdapter extends Adapter implements + ", pageIndexInFile: " + pageIndexInFile); } - // OK, there are bugs in recycler view which tries to bind views - // without recycling them which would give us a chance to clean up. - PageContentProvider boundProvider = mPageContentRepository - .peekPageContentProvider(pageIndexInFile); - if (boundProvider != null) { - PageContentView owner = (PageContentView) boundProvider.getOwner(); - owner.init(null, mEmptyState, mMediaSize, mMinMargins); - mPageContentRepository.releasePageContentProvider(boundProvider); + if (provider != null && provider.getPageIndex() != pageIndexInFile) { + mPageContentRepository.releasePageContentProvider(provider); } provider = mPageContentRepository.acquirePageContentProvider( @@ -732,7 +724,7 @@ public final class PageAdapter extends Adapter implements private void recyclePageView(PageContentView page, int pageIndexInAdapter) { PageContentProvider provider = page.getPageContentProvider(); if (provider != null) { - page.init(null, null, null, null); + page.init(null, mEmptyState, mMediaSize, mMinMargins); mPageContentRepository.releasePageContentProvider(provider); } mBoundPagesInAdapter.remove(pageIndexInAdapter); diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java index 389988a..d169319 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java @@ -953,7 +953,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat // When the update is done we update the print preview. mProgressMessageController.post(); return true; - } else { + } else if (!willUpdate) { // Update preview. updatePrintPreviewController(false); } diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java index b999866..0d45352 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java @@ -77,6 +77,7 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba mRecyclerView = (RecyclerView) activity.findViewById(R.id.preview_content); mRecyclerView.setLayoutManager(mLayoutManger); mRecyclerView.setAdapter(mPageAdapter); + mRecyclerView.setItemViewCacheSize(0); mPreloadController = new PreloadController(mRecyclerView); mRecyclerView.setOnScrollListener(mPreloadController); @@ -348,8 +349,7 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba public void startPreloadContent() { PageAdapter pageAdapter = (PageAdapter) mRecyclerView.getAdapter(); - - if (pageAdapter.isOpened()) { + if (pageAdapter != null && pageAdapter.isOpened()) { PageRange shownPages = computeShownPages(); if (shownPages != null) { pageAdapter.startPreloadContent(shownPages); @@ -359,8 +359,7 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba public void stopPreloadContent() { PageAdapter pageAdapter = (PageAdapter) mRecyclerView.getAdapter(); - - if (pageAdapter.isOpened()) { + if (pageAdapter != null && pageAdapter.isOpened()) { pageAdapter.stopPreloadContent(); } } diff --git a/packages/PrintSpooler/src/com/android/printspooler/widget/PageContentView.java b/packages/PrintSpooler/src/com/android/printspooler/widget/PageContentView.java index 1000117..b792789 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/widget/PageContentView.java +++ b/packages/PrintSpooler/src/com/android/printspooler/widget/PageContentView.java @@ -52,12 +52,12 @@ public class PageContentView extends View @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { + mContentRequested = false; requestPageContentIfNeeded(); } @Override public void onPageContentAvailable(BitmapDrawable content) { - assert (getBackground() != content); setBackground(content); } @@ -70,7 +70,7 @@ public class PageContentView extends View final boolean providerChanged = (mProvider == null) ? provider != null : !mProvider.equals(provider); final boolean loadingDrawableChanged = (mEmptyState == null) - ? mEmptyState != null : !mEmptyState.equals(emptyState); + ? emptyState != null : !mEmptyState.equals(emptyState); final boolean mediaSizeChanged = (mMediaSize == null) ? mediaSize != null : !mMediaSize.equals(mediaSize); final boolean marginsChanged = (mMinMargins == null) diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 3c2a776..bddd691 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -283,6 +283,21 @@ <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> + </intent-filter> + </activity> + + <activity android:name=".egg.LLandActivity" + android:theme="@android:style/Theme.Material.Light.NoActionBar.TranslucentDecor" + android:exported="true" + android:label="@string/lland" + android:hardwareAccelerated="true" + android:launchMode="singleInstance" + android:screenOrientation="locked" + android:process=":sweetsweetdesserts" + android:excludeFromRecents="true"> + <intent-filter> + <action android:name="android.intent.action.MAIN"/> + <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.android.internal.category.PLATLOGO" /> </intent-filter> </activity> diff --git a/packages/SystemUI/res/drawable/android.xml b/packages/SystemUI/res/drawable/android.xml new file mode 100644 index 0000000..750de05 --- /dev/null +++ b/packages/SystemUI/res/drawable/android.xml @@ -0,0 +1,37 @@ +<!-- +Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2 (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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48dp" + android:height="48dp" + android:viewportWidth="48" + android:viewportHeight="48"> + <path + android:name="torso" + android:pathData="M12,36c0,1.1 0.9,2 2,2l2,0l0,7c0,1.7 1.3,3 3,3c1.7,0 3,-1.3 3,-3l0,-7l4,0l0,7c0,1.7 1.3,3 3,3c1.7,0 3,-1.3 3,-3l0,-7l2,0c1.1,0 2,-0.9 2,-2L36,16L12,16L12,36z" + android:fillColor="#FFFFFF"/> + <path + android:name="leftArm" + android:pathData="M7,16c-1.7,0 -3,1.3 -3,3l0,14c0,1.7 1.3,3 3,3c1.7,0 3,-1.3 3,-3L10,19C10,17.3 8.7,16 7,16z" + android:fillColor="#FFFFFF"/> + <path + android:name="rightArm" + android:pathData="M41,16c-1.7,0 -3,1.3 -3,3l0,14c0,1.7 1.3,3 3,3c1.7,0 3,-1.3 3,-3L44,19C44,17.3 42.7,16 41,16z" + android:fillColor="#FFFFFF"/> + <path + android:name="illFormTheHead" + android:pathData="M31.1,4.3l2.6,-2.6c0.4,-0.4 0.4,-1 0,-1.4c-0.4,-0.4 -1,-0.4 -1.4,0l-3,3C27.7,2.5 25.9,2 24,2c-1.9,0 -3.7,0.5 -5.3,1.3l-3,-3c-0.4,-0.4 -1,-0.4 -1.4,0c-0.4,0.4 -0.4,1 0,1.4l2.6,2.6C13.9,6.5 12,10 12,14l24,0C36,10 34.1,6.5 31.1,4.3zM20.31,9c0,0.72 -0.59,1.31 -1.31,1.31c-0.72,0 -1.31,-0.59 -1.31,-1.31c0,-0.72 0.59,-1.31 1.31,-1.31C19.72,7.69 20.31,8.28 20.31,9zM30.31,9c0,0.72 -0.59,1.31 -1.31,1.31c-0.73,0 -1.31,-0.59 -1.31,-1.31c0,-0.72 0.59,-1.31 1.31,-1.31C29.72,7.69 30.31,8.28 30.31,9z" + android:fillColor="#FFFFFF"/> +</vector> diff --git a/packages/SystemUI/res/drawable/cloud.xml b/packages/SystemUI/res/drawable/cloud.xml new file mode 100644 index 0000000..17e4ad2 --- /dev/null +++ b/packages/SystemUI/res/drawable/cloud.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48.0dp" + android:height="48.0dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:pathData="M38.700001,20.100000C37.299999,13.200000 31.299999,8.000000 24.000000,8.000000c-5.800000,0.000000 -10.800000,3.300000 -13.300000,8.100000C4.700000,16.700001 0.000000,21.799999 0.000000,28.000000c0.000000,6.600000 5.400000,12.000000 12.000000,12.000000l26.000000,0.000000c5.500000,0.000000 10.000000,-4.500000 10.000000,-10.000000C48.000000,24.700001 43.900002,20.400000 38.700001,20.100000z" + android:fillColor="#FFFFFF"/> +</vector> diff --git a/packages/SystemUI/res/drawable/cloud_off.xml b/packages/SystemUI/res/drawable/cloud_off.xml new file mode 100644 index 0000000..b15ea5f --- /dev/null +++ b/packages/SystemUI/res/drawable/cloud_off.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:pathData="M19.400000,10.000000c-0.700000,-3.400000 -3.700000,-6.000000 -7.400000,-6.000000c-1.500000,0.000000 -2.900000,0.400000 -4.000000,1.200000l1.500000,1.500000C10.200000,6.200000 11.100000,6.000000 12.000000,6.000000c3.000000,0.000000 5.500000,2.500000 5.500000,5.500000L17.500000,12.000000L19.000000,12.000000c1.700000,0.000000 3.000000,1.300000 3.000000,3.000000c0.000000,1.100000 -0.600000,2.100000 -1.600000,2.600000l1.500000,1.500000c1.300000,-0.900000 2.100000,-2.400000 2.100000,-4.100000C24.000000,12.400000 21.900000,10.200000 19.400000,10.000000zM3.000000,5.300000L5.800000,8.000000C2.600000,8.200000 0.000000,10.800000 0.000000,14.000000c0.000000,3.300000 2.700000,6.000000 6.000000,6.000000l11.700000,0.000000l2.000000,2.000000l1.300000,-1.300000L4.300000,4.000000L3.000000,5.300000zM7.700000,10.000000l8.000000,8.000000L6.000000,18.000000c-2.200000,0.000000 -4.000000,-1.800000 -4.000000,-4.000000c0.000000,-2.200000 1.800000,-4.000000 4.000000,-4.000000L7.700000,10.000000z" + android:fillColor="#FFFFFF"/> +</vector> diff --git a/packages/SystemUI/res/drawable/moon.xml b/packages/SystemUI/res/drawable/moon.xml new file mode 100644 index 0000000..4ee6286 --- /dev/null +++ b/packages/SystemUI/res/drawable/moon.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48.0dp" + android:height="48.0dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:pathData="M18.000000,4.000000c-2.100000,0.000000 -4.100000,0.300000 -6.000000,0.900000C20.100000,7.500000 26.000000,15.000000 26.000000,24.000000s-5.900000,16.500000 -14.000000,19.100000c1.900000,0.600000 3.900000,0.900000 6.000000,0.900000c11.000000,0.000000 20.000000,-9.000000 20.000000,-20.000000S29.000000,4.000000 18.000000,4.000000z" + android:fillColor="#FFF2F2FF"/> +</vector> diff --git a/packages/SystemUI/res/drawable/placeholder.xml b/packages/SystemUI/res/drawable/placeholder.xml new file mode 100644 index 0000000..1933145 --- /dev/null +++ b/packages/SystemUI/res/drawable/placeholder.xml @@ -0,0 +1,51 @@ +<!-- +Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="100dp" + android:height="400dp" + android:viewportWidth="100" + android:viewportHeight="400"> + + <!-- future site of real artwork --> + + <path android:fillColor="#FFFFFF00" + android:pathData="M 0,0 L 100,0 L 100,400 L 0,400 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,0 L 100,25 L 100,50 L 0,25 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,50 L 100,75 L 100,100 L 0,75 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,100 L 100,125 L 100,150 L 0,125 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,150 L 100,175 L 100,200 L 0,175 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,200 L 100,225 L 100,250 L 0,225 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,250 L 100,275 L 100,300 L 0,275 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,300 L 100,325 L 100,350 L 0,325 z" /> + <path + android:fillColor="#FF000000" + android:pathData="M 0,350 L 100,375 L 100,400 L 0,375 z" /> +</vector> + diff --git a/packages/SystemUI/res/drawable/scorecard.xml b/packages/SystemUI/res/drawable/scorecard.xml new file mode 100644 index 0000000..707449a --- /dev/null +++ b/packages/SystemUI/res/drawable/scorecard.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape + xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle" + > + <corners + android:radius="8dp" /> + <solid + android:color="#ffffffff" /> +</shape> diff --git a/packages/SystemUI/res/drawable/scorecard_gameover.xml b/packages/SystemUI/res/drawable/scorecard_gameover.xml new file mode 100644 index 0000000..f663a66 --- /dev/null +++ b/packages/SystemUI/res/drawable/scorecard_gameover.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape + xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle" + > + <corners + android:radius="8dp" /> + <solid + android:color="#ffff0000" /> +</shape> diff --git a/packages/SystemUI/res/drawable/star.xml b/packages/SystemUI/res/drawable/star.xml new file mode 100644 index 0000000..73ca04a --- /dev/null +++ b/packages/SystemUI/res/drawable/star.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48.0dp" + android:height="48.0dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:pathData="M30.250000,17.750000L24.000000,4.000000l-6.250000,13.750000L4.000000,24.000000l13.750000,6.250000L24.000000,44.000000l6.250000,-13.750000L44.000000,24.000000L30.250000,17.750000z" + android:fillColor="#FFFFFF"/> +</vector> diff --git a/packages/SystemUI/res/drawable/sun.xml b/packages/SystemUI/res/drawable/sun.xml new file mode 100644 index 0000000..3e4a233 --- /dev/null +++ b/packages/SystemUI/res/drawable/sun.xml @@ -0,0 +1,29 @@ +<!-- +Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48.0dp" + android:height="48.0dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <group> + <path + android:pathData="M 24,8 A 16,16 0 1,0 24.0001,8 z" + android:fillColor="#FFFFFFCC" /> + <path + android:pathData="M40.0,30.6l6.6,-6.6L40.0,17.4L40.0,8.0l-9.4,0.0L24.0,1.4L17.4,8.0L8.0,8.0l0.0,9.4L1.4,24.0L8.0,30.6L8.0,40.0l9.4,0.0l6.6,6.6l6.6,-6.6L40.0,40.0L40.0,30.6zM24.0,36.0c-6.6,0.0 -12.0,-5.4 -12.0,-12.0s5.4,-12.0 12.0,-12.0c6.6,0.0 12.0,5.4 12.0,12.0S30.6,36.0 24.0,36.0z" + android:fillColor="#FFFFFF40"/> + </group> +</vector> diff --git a/packages/SystemUI/res/drawable/sun2.xml b/packages/SystemUI/res/drawable/sun2.xml new file mode 100644 index 0000000..6d2d504 --- /dev/null +++ b/packages/SystemUI/res/drawable/sun2.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="48.0dp" + android:height="48.0dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:pathData="M40.000000,17.400000L40.000000,8.000000l-9.400000,0.000000L24.000000,1.400000L17.400000,8.000000L8.000000,8.000000l0.000000,9.400000L1.400000,24.000000L8.000000,30.600000L8.000000,40.000000l9.400000,0.000000l6.600000,6.600000l6.600000,-6.600000L40.000000,40.000000l0.000000,-9.400000l6.600000,-6.600000L40.000000,17.400000zM24.000000,36.000000c-6.600000,0.000000 -12.000000,-5.400000 -12.000000,-12.000000s5.400000,-12.000000 12.000000,-12.000000c6.600000,0.000000 12.000000,5.400000 12.000000,12.000000S30.600000,36.000000 24.000000,36.000000zM24.000000,16.000000c-4.400000,0.000000 -8.000000,3.600000 -8.000000,8.000000c0.000000,4.400000 3.600000,8.000000 8.000000,8.000000s8.000000,-3.600000 8.000000,-8.000000C32.000000,19.600000 28.400000,16.000000 24.000000,16.000000z" + android:fillColor="#FF000000"/> +</vector> diff --git a/packages/SystemUI/res/layout/lland.xml b/packages/SystemUI/res/layout/lland.xml new file mode 100644 index 0000000..053225d --- /dev/null +++ b/packages/SystemUI/res/layout/lland.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent" + > + <com.android.systemui.egg.LLand + android:id="@+id/world" + android:layout_width="match_parent" + android:layout_height="match_parent"> + </com.android.systemui.egg.LLand> + <TextView + android:id="@+id/score" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="32sp" + android:textColor="#FFAAAAAA" + android:layout_marginTop="32dp" + android:layout_marginLeft="16dp" + android:layout_gravity="top|left" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:paddingTop="8dp" + android:paddingBottom="8dp" + android:background="@drawable/scorecard" + /> + <TextView + android:id="@+id/welcome" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="30sp" + android:textColor="#FFFFFFFF" + android:layout_gravity="center" + android:layout_marginTop="70dp" + android:visibility="gone" + /> +</FrameLayout> + diff --git a/packages/SystemUI/res/values-af/config.xml b/packages/SystemUI/res/values-af/config.xml index 3a66eab..38497cf 100644 --- a/packages/SystemUI/res/values-af/config.xml +++ b/packages/SystemUI/res/values-af/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 s,10 s,30 s,60 s,120 s"</string> </resources> diff --git a/packages/SystemUI/res/values-am/config.xml b/packages/SystemUI/res/values-am/config.xml index 3a66eab..97e30c9 100644 --- a/packages/SystemUI/res/values-am/config.xml +++ b/packages/SystemUI/res/values-am/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s፣10s፣30s፣60s፣120s"</string> </resources> diff --git a/packages/SystemUI/res/values-ar/config.xml b/packages/SystemUI/res/values-ar/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-ar/config.xml +++ b/packages/SystemUI/res/values-ar/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rGB/config.xml b/packages/SystemUI/res/values-bg/config.xml index 3a66eab..3a6872f 100644 --- a/packages/SystemUI/res/values-en-rGB/config.xml +++ b/packages/SystemUI/res/values-bg/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 с, 10 с, 30 с, 60 с, 120 с"</string> </resources> diff --git a/packages/SystemUI/res/values-bn-rBD/config.xml b/packages/SystemUI/res/values-bn-rBD/config.xml index 947fde9..be49df5 100644 --- a/packages/SystemUI/res/values-bn-rBD/config.xml +++ b/packages/SystemUI/res/values-bn-rBD/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"৬০০০০:১০০০০,৩০০০০০:৩০০০০,১৮০০০০০:৬০০০০,০"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"১সে.,১০সে.,৩০সে.,৬০সে.,১২০সে."</string> </resources> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index c6a381c..c9d1cf5 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -214,10 +214,8 @@ <string name="gps_notification_found_text" msgid="4619274244146446464">"S\'ha establert la ubicació per GPS"</string> <string name="accessibility_location_active" msgid="2427290146138169014">"Sol·licituds d\'ubicació actives"</string> <string name="accessibility_clear_all" msgid="5235938559247164925">"Esborra totes les notificacions."</string> - <!-- no translation found for status_bar_notification_inspect_item_title (5668348142410115323) --> - <skip /> - <!-- no translation found for status_bar_notification_app_settings_title (5525260160341558869) --> - <skip /> + <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"Configuració de les notificacions"</string> + <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"Configuració de l\'aplicació <xliff:g id="APP_NAME">%s</xliff:g>"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"La pantalla girarà automàticament."</string> <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"La pantalla està bloquejada en orientació horitzontal."</string> <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"La pantalla està bloquejada en orientació vertical."</string> @@ -323,7 +321,7 @@ <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Torna a començar"</string> <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Sí, continua"</string> <string name="user_add_user_title" msgid="4553596395824132638">"Vols afegir un usuari nou?"</string> - <string name="user_add_user_message_short" msgid="2161624834066214559">"Quan s\'afegeix un usuari nou, aquest usuari ha de configurar el seu espai.\n\nQualsevol usuari pot actualitzar les aplicacions dels altres usuaris."</string> + <string name="user_add_user_message_short" msgid="2161624834066214559">"Quan s\'afegeix un usuari nou, aquest usuari ha de configurar-se l\'espai.\n\nQualsevol usuari pot actualitzar les aplicacions de la resta d\'usuaris."</string> <string name="battery_saver_notification_title" msgid="237918726750955859">"Estalvi de bateria activada"</string> <string name="battery_saver_notification_text" msgid="820318788126672692">"Redueix el rendiment i l\'ús de les dades en segon pla."</string> <string name="battery_saver_notification_action_text" msgid="109158658238110382">"Desactiva l\'estalvi de bateria"</string> diff --git a/packages/SystemUI/res/values-da/config.xml b/packages/SystemUI/res/values-da/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-da/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-de/config.xml b/packages/SystemUI/res/values-de/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-de/config.xml +++ b/packages/SystemUI/res/values-de/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values-el/config.xml b/packages/SystemUI/res/values-el/config.xml index 3a66eab..f3cccde 100644 --- a/packages/SystemUI/res/values-el/config.xml +++ b/packages/SystemUI/res/values-el/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 δ, 10 δ, 30 δ, 60 δ, 120 δ"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rIN/config.xml b/packages/SystemUI/res/values-en-rIN/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-en-rIN/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-es-rUS/config.xml b/packages/SystemUI/res/values-es-rUS/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-es-rUS/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-es/config.xml b/packages/SystemUI/res/values-es/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-es/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-et-rEE/config.xml b/packages/SystemUI/res/values-et-rEE/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-et-rEE/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-eu-rES/config.xml b/packages/SystemUI/res/values-eu-rES/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-eu-rES/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-fa/config.xml b/packages/SystemUI/res/values-fa/config.xml deleted file mode 100644 index a4a7ca2..0000000 --- a/packages/SystemUI/res/values-fa/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"۶۰۰۰۰:۱۰۰۰۰,۳۰۰۰۰۰:۳۰۰۰۰,۱۸۰۰۰۰۰:۶۰۰۰۰,۰"</string> -</resources> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 11e6241..7130c89 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -70,7 +70,7 @@ <string name="screenshot_saving_title" msgid="8242282144535555697">"در حال ذخیره تصویر صفحه..."</string> <string name="screenshot_saving_text" msgid="2419718443411738818">"تصویر صفحه ذخیره شد."</string> <string name="screenshot_saved_title" msgid="6461865960961414961">"تصویر صفحه گرفته شد."</string> - <string name="screenshot_saved_text" msgid="1152839647677558815">"برای مشاهده تصویر صفحه خود، لمس کنید."</string> + <string name="screenshot_saved_text" msgid="1152839647677558815">"برای مشاهده عکس صفحهنمایشتان، لمس کنید."</string> <string name="screenshot_failed_title" msgid="705781116746922771">"تصویر صفحه گرفته نشد."</string> <string name="screenshot_failed_text" msgid="1260203058661337274">"به دلیل فضای ذخیرهسازی کم یا عدم اجازه برنامه یا سازمانتان، نمیتوان از صفحه عکس گرفت."</string> <string name="usb_preference_title" msgid="6551050377388882787">"گزینههای انتقال فایل USB"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/config.xml b/packages/SystemUI/res/values-fr-rCA/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-fr-rCA/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-fr/config.xml b/packages/SystemUI/res/values-fr/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-fr/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-gl-rES/config.xml b/packages/SystemUI/res/values-gl-rES/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-gl-rES/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml index 68d3af4..c94e04f 100644 --- a/packages/SystemUI/res/values-gl-rES/strings.xml +++ b/packages/SystemUI/res/values-gl-rES/strings.xml @@ -301,9 +301,9 @@ <string name="keyguard_unlock" msgid="8043466894212841998">"Pasa o dedo cara arriba para desbloquear"</string> <string name="phone_hint" msgid="3101468054914424646">"Pasa o dedo cara á dereita para acceder ao teléfono"</string> <string name="camera_hint" msgid="5241441720959174226">"Pasa o dedo cara á esquerda para abrir a cámara"</string> - <string name="interruption_level_none" msgid="3831278883136066646">"Nunca"</string> + <string name="interruption_level_none" msgid="3831278883136066646">"Ningún"</string> <string name="interruption_level_priority" msgid="6517366750688942030">"Prioridade"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Sempre"</string> + <string name="interruption_level_all" msgid="1330581184930945764">"Todas"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para finalizar a carga)"</string> <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Cambiar usuario"</string> <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Cambiar usuario, usuario actual: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string> diff --git a/packages/SystemUI/res/values-hi/config.xml b/packages/SystemUI/res/values-hi/config.xml index 3a66eab..000d96f 100644 --- a/packages/SystemUI/res/values-hi/config.xml +++ b/packages/SystemUI/res/values-hi/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 से,10 से, 30 से, 60 से, 120 से"</string> </resources> diff --git a/packages/SystemUI/res/values-hr/config.xml b/packages/SystemUI/res/values-hr/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-hr/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-hu/config.xml b/packages/SystemUI/res/values-hu/config.xml index 3a66eab..f5ccf75 100644 --- a/packages/SystemUI/res/values-hu/config.xml +++ b/packages/SystemUI/res/values-hu/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1, 10, 30, 60, 120"</string> </resources> diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml index c84e380..9901c88 100644 --- a/packages/SystemUI/res/values-hy-rAM/strings.xml +++ b/packages/SystemUI/res/values-hy-rAM/strings.xml @@ -318,8 +318,8 @@ <string name="guest_wipe_session_message" msgid="8476238178270112811">"Դուք ցանկանու՞մ եք շարունակել ձեր գործողությունը:"</string> <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Սկսել"</string> <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Այո, շարունակել"</string> - <string name="user_add_user_title" msgid="4553596395824132638">"Ավելացնե՞լ նոր օգտվող:"</string> - <string name="user_add_user_message_short" msgid="2161624834066214559">"Երբ նոր օգտվող եք ավելացնում, նա պետք է կարգավորի իր տարածքը:\n\nՑանկացած օգտվող կարող է թարմացնել ծրագրերը՝ մյուս բոլոր օգտվողների համար:"</string> + <string name="user_add_user_title" msgid="4553596395824132638">"Ավելացնե՞լ նոր պրոֆիլ:"</string> + <string name="user_add_user_message_short" msgid="2161624834066214559">"Երբ նոր օգտվող եք ավելացնում, նա պետք է կարգավորի իր պրոֆիլը:\n\nՑանկացած օգտվող կարող է թարմացնել հավելվածները մյուս բոլոր հաշիվների համար:"</string> <string name="battery_saver_notification_title" msgid="237918726750955859">"Մարտկոցի տնտեսումը միացված է"</string> <string name="battery_saver_notification_text" msgid="820318788126672692">"Նվազեցնում է ծանրաբեռնվածությունը և ֆոնային տվյալները"</string> <string name="battery_saver_notification_action_text" msgid="109158658238110382">"Անջատել մարտկոցի տնտեսումը"</string> diff --git a/packages/SystemUI/res/values-in/config.xml b/packages/SystemUI/res/values-in/config.xml index 3a66eab..2aa4b09 100644 --- a/packages/SystemUI/res/values-in/config.xml +++ b/packages/SystemUI/res/values-in/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1dtk,10dtk,30dtk,60dtk,120dtk"</string> </resources> diff --git a/packages/SystemUI/res/values-is-rIS/config.xml b/packages/SystemUI/res/values-is-rIS/config.xml index 3a66eab..46f7456 100644 --- a/packages/SystemUI/res/values-is-rIS/config.xml +++ b/packages/SystemUI/res/values-is-rIS/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 sek.,10 sek., 30 sek., 60 sek.,120 sek."</string> </resources> diff --git a/packages/SystemUI/res/values-it/config.xml b/packages/SystemUI/res/values-it/config.xml index 3a66eab..f87a0a3 100644 --- a/packages/SystemUI/res/values-it/config.xml +++ b/packages/SystemUI/res/values-it/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 s, 10 s, 30 s, 60 s, 120 s"</string> </resources> diff --git a/packages/SystemUI/res/values-iw/config.xml b/packages/SystemUI/res/values-iw/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-iw/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-ja/config.xml b/packages/SystemUI/res/values-ja/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-ja/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-kk-rKZ/config.xml b/packages/SystemUI/res/values-kk-rKZ/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-kk-rKZ/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-km-rKH/config.xml b/packages/SystemUI/res/values-km-rKH/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-km-rKH/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-kn-rIN/config.xml b/packages/SystemUI/res/values-kn-rIN/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-kn-rIN/config.xml +++ b/packages/SystemUI/res/values-kn-rIN/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values-ky-rKG/config.xml b/packages/SystemUI/res/values-ky-rKG/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-ky-rKG/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-ca/config.xml b/packages/SystemUI/res/values-lt/config.xml index 3a66eab..edfec94 100644 --- a/packages/SystemUI/res/values-ca/config.xml +++ b/packages/SystemUI/res/values-lt/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 sek., 10 sek., 30 sek., 60 sek., 120 sek."</string> </resources> diff --git a/packages/SystemUI/res/values-lv/config.xml b/packages/SystemUI/res/values-lv/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-lv/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-cs/config.xml b/packages/SystemUI/res/values-mk-rMK/config.xml index 3a66eab..024f528 100644 --- a/packages/SystemUI/res/values-cs/config.xml +++ b/packages/SystemUI/res/values-mk-rMK/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1сек., 10 сек., 30 сек., 60 сек., 120 сек."</string> </resources> diff --git a/packages/SystemUI/res/values-ml-rIN/config.xml b/packages/SystemUI/res/values-ml-rIN/config.xml index 3a66eab..d2d29f9 100644 --- a/packages/SystemUI/res/values-ml-rIN/config.xml +++ b/packages/SystemUI/res/values-ml-rIN/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1സെ,10സെ,30സെ,60സെ,120സെ"</string> </resources> diff --git a/packages/SystemUI/res/values-mn-rMN/config.xml b/packages/SystemUI/res/values-mn-rMN/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-mn-rMN/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml index bc58845..7d53269 100644 --- a/packages/SystemUI/res/values-mn-rMN/strings.xml +++ b/packages/SystemUI/res/values-mn-rMN/strings.xml @@ -212,10 +212,8 @@ <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS байршил"</string> <string name="accessibility_location_active" msgid="2427290146138169014">"Байршлын хүсэлтүүд идэвхтэй"</string> <string name="accessibility_clear_all" msgid="5235938559247164925">"Бүх мэдэгдлийг цэвэрлэх."</string> - <!-- no translation found for status_bar_notification_inspect_item_title (5668348142410115323) --> - <skip /> - <!-- no translation found for status_bar_notification_app_settings_title (5525260160341558869) --> - <skip /> + <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"Мэдэгдлийн тохиргоо"</string> + <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> тохиргоо"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Дэлгэц автоматаар эргэнэ."</string> <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Дэлгэц хэвтээ чиглэлд түгжигдсэн."</string> <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Дэлгэц босоо чиглэлээр түгжигдсэн."</string> diff --git a/packages/SystemUI/res/values-mr-rIN/config.xml b/packages/SystemUI/res/values-mr-rIN/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-mr-rIN/config.xml +++ b/packages/SystemUI/res/values-mr-rIN/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values-my-rMM/config.xml b/packages/SystemUI/res/values-my-rMM/config.xml index 3a26007..805d893 100644 --- a/packages/SystemUI/res/values-my-rMM/config.xml +++ b/packages/SystemUI/res/values-my-rMM/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"၆၀၀၀၀:၁၀၀၀၀၊ ၃၀၀၀၀၀:၃၀၀၀၀၊ ၁၈၀၀၀၀၀:၆၀၀၀၀,၀"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"၁စက္ကန့်၊ ၁၀စက္ကန့်၊ ၃၀စက္ကန့်၊ 60စက္ကန့်၊ ၁၂၀စက္ကန့်"</string> </resources> diff --git a/packages/SystemUI/res/values-ne-rNP/config.xml b/packages/SystemUI/res/values-ne-rNP/config.xml deleted file mode 100644 index 5fbf1d8..0000000 --- a/packages/SystemUI/res/values-ne-rNP/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"६००००:१००००,३०००००:३००००, १८०००००:६००००,०"</string> -</resources> diff --git a/packages/SystemUI/res/values-nl/config.xml b/packages/SystemUI/res/values-nl/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-nl/config.xml +++ b/packages/SystemUI/res/values-nl/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values-pl/config.xml b/packages/SystemUI/res/values-pl/config.xml index 3a66eab..f87a0a3 100644 --- a/packages/SystemUI/res/values-pl/config.xml +++ b/packages/SystemUI/res/values-pl/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 s, 10 s, 30 s, 60 s, 120 s"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rPT/config.xml b/packages/SystemUI/res/values-pt-rPT/config.xml index 3a66eab..f87a0a3 100644 --- a/packages/SystemUI/res/values-pt-rPT/config.xml +++ b/packages/SystemUI/res/values-pt-rPT/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 s, 10 s, 30 s, 60 s, 120 s"</string> </resources> diff --git a/packages/SystemUI/res/values-pt/config.xml b/packages/SystemUI/res/values-pt/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-pt/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index d784317..4e8880e 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -314,7 +314,7 @@ <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"Ștergeți invitatul?"</string> <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"Toate aplicațiile și datele din această sesiune vor fi șterse."</string> <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"Ștergeți"</string> - <string name="guest_wipe_session_title" msgid="6419439912885956132">"Welcome back, guest!"</string> + <string name="guest_wipe_session_title" msgid="6419439912885956132">"Bine ați revenit în sesiunea pentru invitați!"</string> <string name="guest_wipe_session_message" msgid="8476238178270112811">"Vreți să continuați sesiunea?"</string> <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Începeți din nou"</string> <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Da, continuați"</string> diff --git a/packages/SystemUI/res/values-sk/config.xml b/packages/SystemUI/res/values-sk/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-sk/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-sl/config.xml b/packages/SystemUI/res/values-sl/config.xml deleted file mode 100644 index cd49028..0000000 --- a/packages/SystemUI/res/values-sl/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000, 300000:30000, 1800000:60000, 0"</string> -</resources> diff --git a/packages/SystemUI/res/values-sr/config.xml b/packages/SystemUI/res/values-sr/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-sr/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-sv/config.xml b/packages/SystemUI/res/values-sv/config.xml index 3a66eab..3b683a8 100644 --- a/packages/SystemUI/res/values-sv/config.xml +++ b/packages/SystemUI/res/values-sv/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 sek,10 sek, 30 sek, 60 sek,120 sek"</string> </resources> diff --git a/packages/SystemUI/res/values-sw/config.xml b/packages/SystemUI/res/values-sw/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-sw/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-ta-rIN/config.xml b/packages/SystemUI/res/values-ta-rIN/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-ta-rIN/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-te-rIN/config.xml b/packages/SystemUI/res/values-te-rIN/config.xml index 3a66eab..7a4c0cb 100644 --- a/packages/SystemUI/res/values-te-rIN/config.xml +++ b/packages/SystemUI/res/values-te-rIN/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1సె,10సె,30సె,60సె,120సె"</string> </resources> diff --git a/packages/SystemUI/res/values-th/config.xml b/packages/SystemUI/res/values-th/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-th/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-tl/config.xml b/packages/SystemUI/res/values-tl/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-tl/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-uk/config.xml b/packages/SystemUI/res/values-uk/config.xml index 3a66eab..3a6872f 100644 --- a/packages/SystemUI/res/values-uk/config.xml +++ b/packages/SystemUI/res/values-uk/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1 с, 10 с, 30 с, 60 с, 120 с"</string> </resources> diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml index dccf861..13fad3f 100644 --- a/packages/SystemUI/res/values-ur-rPK/strings.xml +++ b/packages/SystemUI/res/values-ur-rPK/strings.xml @@ -212,10 +212,8 @@ <string name="gps_notification_found_text" msgid="4619274244146446464">"مقام متعین کیا گیا بذریعہ GPS"</string> <string name="accessibility_location_active" msgid="2427290146138169014">"مقام کی درخواستیں فعال ہیں"</string> <string name="accessibility_clear_all" msgid="5235938559247164925">"سبھی اطلاعات صاف کریں۔"</string> - <!-- no translation found for status_bar_notification_inspect_item_title (5668348142410115323) --> - <skip /> - <!-- no translation found for status_bar_notification_app_settings_title (5525260160341558869) --> - <skip /> + <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"اطلاع کی ترتیبات"</string> + <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ترتیبات"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"اسکرین خود بخود گردش کرے گی۔"</string> <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"اسکرین لینڈ اسکیپ سمت بندی میں مقفل ہے۔"</string> <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"اسکرین پورٹریٹ سمت بندی میں مقفل ہے۔"</string> @@ -321,7 +319,7 @@ <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"دوبارہ شروع کریں"</string> <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"ہاں، جاری رکھیں"</string> <string name="user_add_user_title" msgid="4553596395824132638">"نیا صارف شامل کریں؟"</string> - <string name="user_add_user_message_short" msgid="2161624834066214559">"جب آپ ایک نیا صارف شامل کرتے ہیں تو اس شخص کو اپنی جگہ کو ترتیب دینے کی ضرورت ہوتی ہے\n\nکوئی بھی صارف دیگر سبھی صارفین کیلئے ایپس کو اپ ڈیٹ کر سکتا ہے۔"</string> + <string name="user_add_user_message_short" msgid="2161624834066214559">"جب آپ ایک نیا صارف شامل کرتے ہیں تو اس شخص کو اپنی جگہ کو ترتیب دینے کی ضرورت ہوتی ہے۔\n\nکوئی بھی صارف دیگر سبھی صارفین کیلئے ایپس کو اپ ڈیٹ کر سکتا ہے۔"</string> <string name="battery_saver_notification_title" msgid="237918726750955859">"بیٹری سیور آن ہے"</string> <string name="battery_saver_notification_text" msgid="820318788126672692">"کارکردگی اور پس منظر کا ڈیٹا کم کر دیتا ہے"</string> <string name="battery_saver_notification_action_text" msgid="109158658238110382">"بیٹری کی بچت آف کریں"</string> diff --git a/packages/SystemUI/res/values-uz-rUZ/config.xml b/packages/SystemUI/res/values-uz-rUZ/config.xml deleted file mode 100644 index 3a66eab..0000000 --- a/packages/SystemUI/res/values-uz-rUZ/config.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2009, 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> -</resources> diff --git a/packages/SystemUI/res/values-zu/config.xml b/packages/SystemUI/res/values-zu/config.xml index 3a66eab..4bbdea2 100644 --- a/packages/SystemUI/res/values-zu/config.xml +++ b/packages/SystemUI/res/values-zu/config.xml @@ -22,5 +22,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="doze_pulse_period_function" msgid="3632386860508136337">"60000:10000,300000:30000,1800000:60000,0"</string> + <string name="doze_pulse_schedule" msgid="1301215615981695214">"1s,10s,30s,60s,120s"</string> </resources> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 33fb17e..c690ef4 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -452,10 +452,14 @@ <!-- How far the user needs to drag up to invoke search. --> <dimen name="search_panel_threshold">100dp</dimen> - <!-- The width/height of the phone/camera/unlock icon on keyguard. --> + <!-- The width/height of the phone/camera/unlock icon view on keyguard. --> <dimen name="keyguard_affordance_height">56dp</dimen> <dimen name="keyguard_affordance_width">56dp</dimen> + <!-- The width/height of the phone/camera/unlock icon drawable on keyguard. --> + <dimen name="keyguard_affordance_icon_height">24dp</dimen> + <dimen name="keyguard_affordance_icon_width">24dp</dimen> + <dimen name="keyguard_indication_margin_bottom">65dp</dimen> <!-- The text size for battery level --> diff --git a/packages/SystemUI/res/values/lland_config.xml b/packages/SystemUI/res/values/lland_config.xml new file mode 100644 index 0000000..56125a5 --- /dev/null +++ b/packages/SystemUI/res/values/lland_config.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2014, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<resources> + <dimen name="obstacle_spacing">380dp</dimen> + <dimen name="translation_per_sec">100dp</dimen> + <dimen name="boost_dv">600dp</dimen> + <dimen name="player_hit_size">40dp</dimen> + <dimen name="player_size">40dp</dimen> + <dimen name="obstacle_width">80dp</dimen> + <dimen name="obstacle_gap">170dp</dimen> + <dimen name="obstacle_height_min">40dp</dimen> + <dimen name="building_width_min">20dp</dimen> + <dimen name="building_width_max">250dp</dimen> + <dimen name="building_height_min">20dp</dimen> + <dimen name="cloud_size_min">10dp</dimen> + <dimen name="cloud_size_max">100dp</dimen> + <dimen name="sun_size">45dp</dimen> + <dimen name="moon_size">30dp</dimen> + <dimen name="star_size_min">3dp</dimen> + <dimen name="star_size_max">5dp</dimen> + <dimen name="G">30dp</dimen> + <dimen name="max_v">1000dp</dimen> + <dimen name="scenery_z">6dp</dimen> + <dimen name="obstacle_z">15dp</dimen> + <dimen name="player_z">15dp</dimen> + <dimen name="player_z_boost">18dp</dimen> + <dimen name="hud_z">35dp</dimen> +</resources> diff --git a/packages/SystemUI/res/values/lland_strings.xml b/packages/SystemUI/res/values/lland_strings.xml new file mode 100644 index 0000000..ce88157 --- /dev/null +++ b/packages/SystemUI/res/values/lland_strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright (c) 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Name of the L Land easter egg. DO NOT TRANSLATE --> + <string name="lland">L Land</string> +</resources> diff --git a/packages/SystemUI/src/com/android/systemui/egg/LLand.java b/packages/SystemUI/src/com/android/systemui/egg/LLand.java new file mode 100644 index 0000000..d1c02dd --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/egg/LLand.java @@ -0,0 +1,748 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.egg; + +import android.animation.TimeAnimator; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.*; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.*; +import android.view.animation.DecelerateInterpolator; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; + +import com.android.systemui.R; + +public class LLand extends FrameLayout { + public static final String TAG = "LLand"; + + public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); + public static final boolean DEBUG_DRAW = false && DEBUG; + + public static final void L(String s, Object ... objects) { + if (DEBUG) { + Log.d(TAG, String.format(s, objects)); + } + } + + public static final boolean AUTOSTART = true; + public static final boolean HAVE_STARS = true; + + public static final float DEBUG_SPEED_MULTIPLIER = 1f; // 0.1f; + public static final boolean DEBUG_IDDQD = false; + + private static class Params { + public float TRANSLATION_PER_SEC; + public int OBSTACLE_SPACING, OBSTACLE_PERIOD; + public int BOOST_DV; + public int PLAYER_HIT_SIZE; + public int PLAYER_SIZE; + public int OBSTACLE_WIDTH; + public int OBSTACLE_GAP; + public int OBSTACLE_MIN; + public int BUILDING_WIDTH_MIN, BUILDING_WIDTH_MAX; + public int BUILDING_HEIGHT_MIN; + public int CLOUD_SIZE_MIN, CLOUD_SIZE_MAX; + public int STAR_SIZE_MIN, STAR_SIZE_MAX; + public int G; + public int MAX_V; + public float SCENERY_Z, OBSTACLE_Z, PLAYER_Z, PLAYER_Z_BOOST, HUD_Z; + public Params(Resources res) { + TRANSLATION_PER_SEC = res.getDimension(R.dimen.translation_per_sec); + OBSTACLE_SPACING = res.getDimensionPixelSize(R.dimen.obstacle_spacing); + OBSTACLE_PERIOD = (int) (OBSTACLE_SPACING / TRANSLATION_PER_SEC); + BOOST_DV = res.getDimensionPixelSize(R.dimen.boost_dv); + PLAYER_HIT_SIZE = res.getDimensionPixelSize(R.dimen.player_hit_size); + PLAYER_SIZE = res.getDimensionPixelSize(R.dimen.player_size); + OBSTACLE_WIDTH = res.getDimensionPixelSize(R.dimen.obstacle_width); + OBSTACLE_GAP = res.getDimensionPixelSize(R.dimen.obstacle_gap); + OBSTACLE_MIN = res.getDimensionPixelSize(R.dimen.obstacle_height_min); + BUILDING_HEIGHT_MIN = res.getDimensionPixelSize(R.dimen.building_height_min); + BUILDING_WIDTH_MIN = res.getDimensionPixelSize(R.dimen.building_width_min); + BUILDING_WIDTH_MAX = res.getDimensionPixelSize(R.dimen.building_width_max); + CLOUD_SIZE_MIN = res.getDimensionPixelSize(R.dimen.cloud_size_min); + CLOUD_SIZE_MAX = res.getDimensionPixelSize(R.dimen.cloud_size_max); + STAR_SIZE_MIN = res.getDimensionPixelSize(R.dimen.star_size_min); + STAR_SIZE_MAX = res.getDimensionPixelSize(R.dimen.star_size_max); + + G = res.getDimensionPixelSize(R.dimen.G); + MAX_V = res.getDimensionPixelSize(R.dimen.max_v); + + SCENERY_Z = res.getDimensionPixelSize(R.dimen.scenery_z); + OBSTACLE_Z = res.getDimensionPixelSize(R.dimen.obstacle_z); + PLAYER_Z = res.getDimensionPixelSize(R.dimen.player_z); + PLAYER_Z_BOOST = res.getDimensionPixelSize(R.dimen.player_z_boost); + HUD_Z = res.getDimensionPixelSize(R.dimen.hud_z); + } + } + + private TimeAnimator mAnim; + + private TextView mScoreField; + private View mSplash; + + private Player mDroid; + private ArrayList<Obstacle> mObstaclesInPlay = new ArrayList<Obstacle>(); + + private float t, dt; + + private int mScore; + private float mLastPipeTime; // in sec + private int mWidth, mHeight; + private boolean mAnimating, mPlaying; + private boolean mFrozen; // after death, a short backoff + + private int mTimeOfDay; + private static final int DAY = 0, NIGHT = 1, TWILIGHT = 2, SUNSET = 3; + private static final int[][] SKIES = { + { 0xFFc0c0FF, 0xFFa0a0FF }, // DAY + { 0xFF000010, 0xFF000000 }, // NIGHT + { 0xFF000040, 0xFF000010 }, // TWILIGHT + { 0xFF805010, 0xFF202080 }, // SUNSET + }; + + private static Params PARAMS; + + public LLand(Context context) { + this(context, null); + } + + public LLand(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public LLand(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setFocusable(true); + PARAMS = new Params(getResources()); + mTimeOfDay = irand(0, SKIES.length); + } + + @Override + public boolean willNotDraw() { + return !DEBUG; + } + + public int getGameWidth() { return mWidth; } + public int getGameHeight() { return mHeight; } + public float getGameTime() { return t; } + public float getLastTimeStep() { return dt; } + + public void setScoreField(TextView tv) { + mScoreField = tv; + if (tv != null) { + tv.setTranslationZ(PARAMS.HUD_Z); + if (!(mAnimating && mPlaying)) { + tv.setTranslationY(-500); + } + } + } + + public void setSplash(View v) { + mSplash = v; + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + stop(); + reset(); + if (AUTOSTART) { + start(false); + } + } + + final float hsv[] = {0, 0, 0}; + + private void reset() { + L("reset"); + final Drawable sky = new GradientDrawable( + GradientDrawable.Orientation.BOTTOM_TOP, + SKIES[mTimeOfDay] + ); + sky.setDither(true); + setBackground(sky); + + setScaleX(frand() > 0.5f ? 1 : -1); + + setScore(0); + + int i = getChildCount(); + while (i-->0) { + final View v = getChildAt(i); + if (v instanceof GameView) { + removeViewAt(i); + } + } + + mObstaclesInPlay.clear(); + + mWidth = getWidth(); + mHeight = getHeight(); + + boolean showingSun = (mTimeOfDay == DAY || mTimeOfDay == SUNSET) && frand() > 0.25; + if (showingSun) { + final Star sun = new Star(getContext()); + sun.setBackgroundResource(R.drawable.sun); + final int w = getResources().getDimensionPixelSize(R.dimen.sun_size); + sun.setTranslationX(frand(w, mWidth-w)); + if (mTimeOfDay == DAY) { + sun.setTranslationY(frand(w, (mHeight * 0.66f))); + sun.getBackground().setTint(0); + } else { + sun.setTranslationY(frand(mHeight * 0.66f, mHeight - w)); + sun.getBackground().setTintMode(PorterDuff.Mode.SRC_ATOP); + sun.getBackground().setTint(0xC0FF8000); + + } + addView(sun, new LayoutParams(w, w)); + } + if (!showingSun) { + final boolean dark = mTimeOfDay == NIGHT || mTimeOfDay == TWILIGHT; + final float ff = frand(); + if ((dark && ff < 0.75f) || ff < 0.5f) { + final Star moon = new Star(getContext()); + moon.setBackgroundResource(R.drawable.moon); + moon.getBackground().setAlpha(dark ? 255 : 128); + moon.setScaleX(frand() > 0.5 ? -1 : 1); + moon.setRotation(moon.getScaleX() * frand(5, 30)); + final int w = getResources().getDimensionPixelSize(R.dimen.sun_size); + moon.setTranslationX(frand(w, mWidth - w)); + moon.setTranslationY(frand(w, mHeight - w)); + addView(moon, new LayoutParams(w, w)); + } + } + + final int mh = mHeight / 6; + final boolean cloudless = frand() < 0.25; + final int N = 20; + for (i=0; i<N; i++) { + final float r1 = frand(); + final Scenery s; + if (HAVE_STARS && r1 < 0.3 && mTimeOfDay != DAY) { + s = new Star(getContext()); + } else if (r1 < 0.6 && !cloudless) { + s = new Cloud(getContext()); + } else { + s = new Building(getContext()); + + s.z = (float)i/N; + s.setTranslationZ(PARAMS.SCENERY_Z * (1+s.z)); + s.v = 0.85f * s.z; // buildings move proportional to their distance + hsv[0] = 175; + hsv[1] = 0.25f; + hsv[2] = 1 * s.z; + s.setBackgroundColor(Color.HSVToColor(hsv)); + s.h = irand(PARAMS.BUILDING_HEIGHT_MIN, mh); + } + final LayoutParams lp = new LayoutParams(s.w, s.h); + if (s instanceof Building) { + lp.gravity = Gravity.BOTTOM; + } else { + lp.gravity = Gravity.TOP; + final float r = frand(); + if (s instanceof Star) { + lp.topMargin = (int) (r * r * mHeight); + } else { + lp.topMargin = (int) (1 - r*r * mHeight/2) + mHeight/2; + } + } + + addView(s, lp); + s.setTranslationX(frand(-lp.width, mWidth + lp.width)); + } + + mDroid = new Player(getContext()); + mDroid.setX(mWidth / 2); + mDroid.setY(mHeight / 2); + addView(mDroid, new LayoutParams(PARAMS.PLAYER_SIZE, PARAMS.PLAYER_SIZE)); + if (mAnim != null) { + Log.wtf(TAG, "reseting while animating??!?"); + } + mAnim = new TimeAnimator(); + mAnim.setTimeListener(new TimeAnimator.TimeListener() { + @Override + public void onTimeUpdate(TimeAnimator timeAnimator, long t, long dt) { + step(t, dt); + } + }); + } + + private void setScore(int score) { + mScore = score; + if (mScoreField != null) mScoreField.setText(String.valueOf(score)); + } + + private void addScore(int incr) { + setScore(mScore + incr); + } + + private void start(boolean startPlaying) { + L("start(startPlaying=%s)", startPlaying?"true":"false"); + if (startPlaying) { + mPlaying = true; + + t = 0; + mLastPipeTime = getGameTime() - PARAMS.OBSTACLE_PERIOD; // queue up a obstacle + + if (mSplash != null && mSplash.getAlpha() > 0f) { + mSplash.setTranslationZ(PARAMS.HUD_Z); + mSplash.animate().alpha(0).translationZ(0).setDuration(400); + + mScoreField.animate().translationY(0) + .setInterpolator(new DecelerateInterpolator()) + .setDuration(1500); + } + + mScoreField.setTextColor(0xFFAAAAAA); + mScoreField.setBackgroundResource(R.drawable.scorecard); + mDroid.setVisibility(View.VISIBLE); + mDroid.setX(mWidth / 2); + mDroid.setY(mHeight / 2); + } else { + mDroid.setVisibility(View.GONE); + } + if (!mAnimating) { + mAnim.start(); + mAnimating = true; + } + } + + private void stop() { + if (mAnimating) { + mAnim.cancel(); + mAnim = null; + mAnimating = false; + mScoreField.setTextColor(0xFFFFFFFF); + mScoreField.setBackgroundResource(R.drawable.scorecard_gameover); + mTimeOfDay = irand(0, SKIES.length); // for next reset + mFrozen = true; + postDelayed(new Runnable() { + @Override + public void run() { + mFrozen = false; + } + }, 250); + } + } + + public static final float lerp(float x, float a, float b) { + return (b - a) * x + a; + } + + public static final float rlerp(float v, float a, float b) { + return (v - a) / (b - a); + } + + public static final float clamp(float f) { + return f < 0f ? 0f : f > 1f ? 1f : f; + } + + public static final float frand() { + return (float) Math.random(); + } + + public static final float frand(float a, float b) { + return lerp(frand(), a, b); + } + + public static final int irand(int a, int b) { + return (int) lerp(frand(), (float) a, (float) b); + } + + private void step(long t_ms, long dt_ms) { + t = t_ms / 1000f; // seconds + dt = dt_ms / 1000f; + + if (DEBUG) { + t *= DEBUG_SPEED_MULTIPLIER; + dt *= DEBUG_SPEED_MULTIPLIER; + } + + // 1. Move all objects and update bounds + final int N = getChildCount(); + int i = 0; + for (; i<N; i++) { + final View v = getChildAt(i); + if (v instanceof GameView) { + ((GameView) v).step(t_ms, dt_ms, t, dt); + } + } + + // 2. Check for altitude + if (mPlaying && mDroid.below(mHeight)) { + if (DEBUG_IDDQD) { + poke(); + } else { + L("player hit the floor"); + stop(); + } + } + + // 3. Check for obstacles + boolean passedBarrier = false; + for (int j = mObstaclesInPlay.size(); j-->0;) { + final Obstacle ob = mObstaclesInPlay.get(j); + if (mPlaying && ob.intersects(mDroid) && !DEBUG_IDDQD) { + L("player hit an obstacle"); + stop(); + } else if (ob.cleared(mDroid)) { + passedBarrier = true; + mObstaclesInPlay.remove(j); + } + } + + if (mPlaying && passedBarrier) { + addScore(1); + } + + // 4. Handle edge of screen + // Walk backwards to make sure removal is safe + while (i-->0) { + final View v = getChildAt(i); + if (v instanceof Obstacle) { + if (v.getTranslationX() + v.getWidth() < 0) { + removeViewAt(i); + } + } else if (v instanceof Scenery) { + final Scenery s = (Scenery) v; + if (v.getTranslationX() + s.w < 0) { + v.setTranslationX(getWidth()); + } + } + } + + // 3. Time for more obstacles! + if (mPlaying && (t - mLastPipeTime) > PARAMS.OBSTACLE_PERIOD) { + mLastPipeTime = t; + final int obstacley = (int) (Math.random() + * (mHeight - 2*PARAMS.OBSTACLE_MIN - PARAMS.OBSTACLE_GAP)) + PARAMS.OBSTACLE_MIN; + + final Obstacle p1 = new Obstacle(getContext(), obstacley); + addView(p1, new LayoutParams( + PARAMS.OBSTACLE_WIDTH, + mHeight, + Gravity.TOP|Gravity.LEFT)); + p1.setTranslationX(mWidth); + p1.setTranslationY(-mHeight); + p1.setTranslationZ(0); + p1.animate() + .translationY(-mHeight+p1.h) + .translationZ(PARAMS.OBSTACLE_Z) + .setStartDelay(irand(0,250)) + .setDuration(250); + mObstaclesInPlay.add(p1); + + final Obstacle p2 = new Obstacle(getContext(), + mHeight - obstacley - PARAMS.OBSTACLE_GAP); + addView(p2, new LayoutParams( + PARAMS.OBSTACLE_WIDTH, + mHeight, + Gravity.TOP|Gravity.LEFT)); + p2.setTranslationX(mWidth); + p2.setTranslationY(mHeight); + p2.setTranslationZ(0); + p2.animate() + .translationY(mHeight-p2.h) + .translationZ(PARAMS.OBSTACLE_Z) + .setStartDelay(irand(0,100)) + .setDuration(400); + mObstaclesInPlay.add(p2); + } + + if (DEBUG) { + final Rect r = new Rect(); + mDroid.getHitRect(r); + r.inset(-4, -4); + invalidate(r); + } + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (DEBUG) L("touch: %s", ev); + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + poke(); + return true; + } + return false; + } + + @Override + public boolean onTrackballEvent(MotionEvent ev) { + if (DEBUG) L("trackball: %s", ev); + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + poke(); + return true; + } + return false; + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent ev) { + if (DEBUG) L("keyDown: %d", keyCode); + switch (keyCode) { + case KeyEvent.KEYCODE_DPAD_CENTER: + case KeyEvent.KEYCODE_DPAD_UP: + case KeyEvent.KEYCODE_SPACE: + case KeyEvent.KEYCODE_ENTER: + case KeyEvent.KEYCODE_BUTTON_A: + poke(); + return true; + } + return false; + } + + @Override + public boolean onGenericMotionEvent (MotionEvent ev) { + if (DEBUG) L("generic: %s", ev); + return false; + } + + private void poke() { + L("poke"); + if (mFrozen) return; + if (!mAnimating) { + reset(); + start(true); + } else if (!mPlaying) { + start(true); + } + mDroid.boost(); + if (DEBUG) { + mDroid.dv *= DEBUG_SPEED_MULTIPLIER; + mDroid.animate().setDuration((long) (200/DEBUG_SPEED_MULTIPLIER)); + } + } + + @Override + public void onDraw(Canvas c) { + super.onDraw(c); + + if (!DEBUG_DRAW) return; + + final Paint pt = new Paint(); + pt.setColor(0xFFFFFFFF); + final int L = mDroid.corners.length; + final int N = L/2; + for (int i=0; i<N; i++) { + final int x = (int) mDroid.corners[i*2]; + final int y = (int) mDroid.corners[i*2+1]; + c.drawCircle(x, y, 4, pt); + c.drawLine(x, y, + mDroid.corners[(i*2+2)%L], + mDroid.corners[(i*2+3)%L], + pt); + } + + final int M = getChildCount(); + pt.setColor(0x6000FF00); + for (int i=0; i<M; i++) { + final View v = getChildAt(i); + if (v == mDroid) continue; + if (!(v instanceof GameView)) continue; + final Rect r = new Rect(); + v.getHitRect(r); + c.drawRect(r, pt); + } + + pt.setColor(Color.BLACK); + final StringBuilder sb = new StringBuilder("obstacles: "); + for (Obstacle ob : mObstaclesInPlay) { + sb.append(ob.hitRect.toShortString()); + sb.append(" "); + } + pt.setTextSize(20f); + c.drawText(sb.toString(), 20, 100, pt); + } + + static final Rect sTmpRect = new Rect(); + + private interface GameView { + public void step(long t_ms, long dt_ms, float t, float dt); + } + + private class Player extends ImageView implements GameView { + public float dv; + + private final float[] sHull = new float[] { + 0.3f, 0f, // left antenna + 0.7f, 0f, // right antenna + 0.92f, 0.33f, // off the right shoulder of Orion + 0.92f, 0.75f, // right hand (our right, not his right) + 0.6f, 1f, // right foot + 0.4f, 1f, // left foot BLUE! + 0.08f, 0.75f, // sinistram + 0.08f, 0.33f, // cold shoulder + }; + public final float[] corners = new float[sHull.length]; + + public Player(Context context) { + super(context); + + setBackgroundResource(R.drawable.android); + getBackground().setTintMode(PorterDuff.Mode.SRC_ATOP); + getBackground().setTint(0xFF00FF00); + setOutlineProvider(new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + final int w = view.getWidth(); + final int h = view.getHeight(); + final int ix = (int) (w * 0.3f); + final int iy = (int) (h * 0.2f); + outline.setRect(ix, iy, w - ix, h - iy); + } + }); + } + + public void prepareCheckIntersections() { + final int inset = (PARAMS.PLAYER_SIZE - PARAMS.PLAYER_HIT_SIZE)/2; + final int scale = PARAMS.PLAYER_HIT_SIZE; + final int N = sHull.length/2; + for (int i=0; i<N; i++) { + corners[i*2] = scale * sHull[i*2] + inset; + corners[i*2+1] = scale * sHull[i*2+1] + inset; + } + final Matrix m = getMatrix(); + m.mapPoints(corners); + } + + public boolean below(int h) { + final int N = corners.length/2; + for (int i=0; i<N; i++) { + final int y = (int) corners[i*2+1]; + if (y >= h) return true; + } + return false; + } + + public void step(long t_ms, long dt_ms, float t, float dt) { + if (getVisibility() != View.VISIBLE) return; // not playing yet + + dv += PARAMS.G; + if (dv < -PARAMS.MAX_V) dv = -PARAMS.MAX_V; + else if (dv > PARAMS.MAX_V) dv = PARAMS.MAX_V; + + final float y = getTranslationY() + dv * dt; + setTranslationY(y < 0 ? 0 : y); + setRotation( + 90 + lerp(clamp(rlerp(dv, PARAMS.MAX_V, -1 * PARAMS.MAX_V)), 90, -90)); + + prepareCheckIntersections(); + } + + public void boost() { + dv = -PARAMS.BOOST_DV; + setTranslationZ(PARAMS.PLAYER_Z_BOOST); + setScaleX(1.25f); + setScaleY(1.25f); + animate() + .scaleX(1f) + .scaleY(1f) + .translationZ(PARAMS.PLAYER_Z) + .setDuration(200); + } + } + + private class Obstacle extends View implements GameView { + public float h; + + public final Rect hitRect = new Rect(); + + public Obstacle(Context context, float h) { + super(context); + setBackgroundResource(R.drawable.placeholder); + this.h = h; + } + + public boolean intersects(Player p) { + final int N = p.corners.length/2; + for (int i=0; i<N; i++) { + final int x = (int) p.corners[i*2]; + final int y = (int) p.corners[i*2+1]; + if (hitRect.contains(x, y)) return true; + } + return false; + } + + public boolean cleared(Player p) { + final int N = p.corners.length/2; + for (int i=0; i<N; i++) { + final int x = (int) p.corners[i*2]; + if (hitRect.right >= x) return false; + } + return true; + } + + @Override + public void step(long t_ms, long dt_ms, float t, float dt) { + setTranslationX(getTranslationX()-PARAMS.TRANSLATION_PER_SEC*dt); + getHitRect(hitRect); + } + } + + private class Scenery extends FrameLayout implements GameView { + public float z; + public float v; + public int h, w; + public Scenery(Context context) { + super(context); + } + + @Override + public void step(long t_ms, long dt_ms, float t, float dt) { + setTranslationX(getTranslationX() - PARAMS.TRANSLATION_PER_SEC * dt * v); + } + } + + private class Building extends Scenery { + public Building(Context context) { + super(context); + + w = irand(PARAMS.BUILDING_WIDTH_MIN, PARAMS.BUILDING_WIDTH_MAX); + h = 0; // will be setup later, along with z + + setTranslationZ(PARAMS.SCENERY_Z); + } + } + + private class Cloud extends Scenery { + public Cloud(Context context) { + super(context); + setBackgroundResource(frand() < 0.01f ? R.drawable.cloud_off : R.drawable.cloud); + getBackground().setAlpha(0x40); + w = h = irand(PARAMS.CLOUD_SIZE_MIN, PARAMS.CLOUD_SIZE_MAX); + z = 0; + v = frand(0.15f,0.5f); + } + } + + private class Star extends Scenery { + public Star(Context context) { + super(context); + setBackgroundResource(R.drawable.star); + w = h = irand(PARAMS.STAR_SIZE_MIN, PARAMS.STAR_SIZE_MAX); + v = z = 0; + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/egg/LLandActivity.java b/packages/SystemUI/src/com/android/systemui/egg/LLandActivity.java new file mode 100644 index 0000000..88fd952 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/egg/LLandActivity.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.egg; + +import android.app.Activity; +import android.os.Bundle; +import android.util.Log; +import android.widget.TextView; + +import com.android.systemui.R; + +public class LLandActivity extends Activity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.lland); + LLand world = (LLand) findViewById(R.id.world); + world.setScoreField((TextView) findViewById(R.id.score)); + world.setSplash(findViewById(R.id.welcome)); + Log.v(LLand.TAG, "focus: " + world.requestFocus()); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 9af893d..4af8499 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -170,6 +170,8 @@ public class KeyguardViewMediator extends SystemUI { private boolean mSwitchingUser; private boolean mSystemReady; + private boolean mBootCompleted; + private boolean mBootSendUserPresent; // Whether the next call to playSounds() should be skipped. Defaults to // true because the first lock (on boot) should be silent. @@ -1145,8 +1147,14 @@ public class KeyguardViewMediator extends SystemUI { } private void sendUserPresentBroadcast() { - final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser()); - mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, currentUser); + synchronized (this) { + if (mBootCompleted) { + final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser()); + mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, currentUser); + } else { + mBootSendUserPresent = true; + } + } } /** @@ -1406,6 +1414,12 @@ public class KeyguardViewMediator extends SystemUI { public void onBootCompleted() { mUpdateMonitor.dispatchBootCompleted(); + synchronized (this) { + mBootCompleted = true; + if (mBootSendUserPresent) { + sendUserPresentBroadcast(); + } + } } public StatusBarKeyguardViewManager registerStatusBar(PhoneStatusBar phoneStatusBar, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java index e323dd6..754fade 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -25,6 +25,8 @@ import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Configuration; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.InsetDrawable; import android.os.AsyncTask; import android.os.Bundle; import android.os.RemoteException; @@ -91,6 +93,8 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL private final TrustDrawable mTrustDrawable; + private int mLastUnlockIconRes = 0; + public KeyguardBottomAreaView(Context context) { this(context, null); } @@ -380,7 +384,17 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL ? com.android.internal.R.drawable.ic_account_circle : mUnlockMethodCache.isMethodInsecure() ? R.drawable.ic_lock_open_24dp : R.drawable.ic_lock_24dp; - mLockIcon.setImageResource(iconRes); + if (mLastUnlockIconRes != iconRes) { + Drawable icon = mContext.getDrawable(iconRes); + int iconHeight = getResources().getDimensionPixelSize( + R.dimen.keyguard_affordance_icon_height); + int iconWidth = getResources().getDimensionPixelSize( + R.dimen.keyguard_affordance_icon_width); + if (icon.getIntrinsicHeight() != iconHeight || icon.getIntrinsicWidth() != iconWidth) { + icon = new IntrinsicSizeDrawable(icon, iconWidth, iconHeight); + } + mLockIcon.setImageDrawable(icon); + } boolean trustManaged = mUnlockMethodCache.isTrustManaged(); mTrustDrawable.setTrustManaged(trustManaged); updateLockIconClickability(); @@ -469,4 +483,30 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL KeyguardIndicationController keyguardIndicationController) { mIndicationController = keyguardIndicationController; } + + + /** + * A wrapper around another Drawable that overrides the intrinsic size. + */ + private static class IntrinsicSizeDrawable extends InsetDrawable { + + private final int mIntrinsicWidth; + private final int mIntrinsicHeight; + + public IntrinsicSizeDrawable(Drawable drawable, int intrinsicWidth, int intrinsicHeight) { + super(drawable, 0); + mIntrinsicWidth = intrinsicWidth; + mIntrinsicHeight = intrinsicHeight; + } + + @Override + public int getIntrinsicWidth() { + return mIntrinsicWidth; + } + + @Override + public int getIntrinsicHeight() { + return mIntrinsicHeight; + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 1b4254c..353c887 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1485,7 +1485,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, updateClearAll(); updateEmptyShadeView(); - mNotificationPanel.setQsExpansionEnabled(isDeviceProvisioned()); + // Disable QS if device not provisioned. + // If the user switcher is simple then disable QS during setup because + // the user intends to use the lock screen user switcher, QS in not needed. + mNotificationPanel.setQsExpansionEnabled(isDeviceProvisioned() + && (!mUserSwitcherController.isSimpleUserSwitcher() || mUserSetup)); mShadeUpdates.check(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java index 15a7229..cb9abfd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java @@ -207,6 +207,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL FontSizeUtils.updateFontSize(mAmPm, R.dimen.qs_time_collapsed_size); FontSizeUtils.updateFontSize(this, R.id.empty_time_view, R.dimen.qs_time_expanded_size); + mEmergencyCallsOnly.setText(com.android.internal.R.string.emergency_calls_only); + mClockCollapsedSize = getResources().getDimensionPixelSize(R.dimen.qs_time_collapsed_size); mClockExpandedSize = getResources().getDimensionPixelSize(R.dimen.qs_time_expanded_size); mClockCollapsedScaleFactor = (float) mClockCollapsedSize / (float) mClockExpandedSize; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java index e8f35fd..bbe6622 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java @@ -227,7 +227,14 @@ public class UserSwitcherController { int id; if (record.isGuest && record.info == null) { // No guest user. Create one. - id = mUserManager.createGuest(mContext, mContext.getString(R.string.guest_nickname)).id; + UserInfo guest = mUserManager.createGuest( + mContext, mContext.getString(R.string.guest_nickname)); + if (guest == null) { + // Couldn't create guest, most likely because there already exists one, we just + // haven't reloaded the user list yet. + return; + } + id = guest.id; } else if (record.isAddUser) { showAddUserDialog(); return; @@ -564,8 +571,14 @@ public class UserSwitcherController { cancel(); } else { dismiss(); - int id = mUserManager.createUser( - mContext.getString(R.string.user_new_user_name), 0 /* flags */).id; + UserInfo user = mUserManager.createUser( + mContext.getString(R.string.user_new_user_name), 0 /* flags */); + if (user == null) { + // Couldn't create user, most likely because there are too many, but we haven't + // been able to reload the list yet. + return; + } + int id = user.id; Bitmap icon = UserIcons.convertToBitmap(UserIcons.getDefaultUserIcon( id, /* light= */ false)); mUserManager.setUserIcon(id, icon); diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index c516874..57ed619 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -2125,8 +2125,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } } - private final class DecorView extends FrameLayout implements RootViewSurfaceTaker, - View.OnSystemUiVisibilityChangeListener { + private final class DecorView extends FrameLayout implements RootViewSurfaceTaker { /* package */int mDefaultOpacity = PixelFormat.OPAQUE; /** The feature ID of the panel, or -1 if this is the application's DecorView */ @@ -2163,8 +2162,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { private int mLastTopInset = 0; private int mLastBottomInset = 0; private int mLastRightInset = 0; - private int mLastSystemUiVisibility = 0; - private int mLastWindowSystemUiVisibility = 0; public DecorView(Context context, int featureId) { @@ -2745,14 +2742,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } @Override - public void onSystemUiVisibilityChange(int visible) { - mLastSystemUiVisibility = visible; - updateColorViews(null /* insets */); - } - - @Override public void onWindowSystemUiVisibilityChanged(int visible) { - mLastWindowSystemUiVisibility = visible; updateColorViews(null /* insets */); } @@ -2774,6 +2764,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } private WindowInsets updateColorViews(WindowInsets insets) { + WindowManager.LayoutParams attrs = getAttributes(); + int sysUiVisibility = attrs.systemUiVisibility | getWindowSystemUiVisibility(); + if (!mIsFloating && ActivityManager.isHighEndGfx()) { if (insets != null) { mLastTopInset = Math.min(insets.getStableInsetTop(), @@ -2783,13 +2776,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { mLastRightInset = Math.min(insets.getStableInsetRight(), insets.getSystemWindowInsetRight()); } - mStatusColorView = updateColorViewInt(mStatusColorView, + mStatusColorView = updateColorViewInt(mStatusColorView, sysUiVisibility, SYSTEM_UI_FLAG_FULLSCREEN, FLAG_TRANSLUCENT_STATUS, mStatusBarColor, mLastTopInset, Gravity.TOP, STATUS_BAR_BACKGROUND_TRANSITION_NAME, com.android.internal.R.id.statusBarBackground, (getAttributes().flags & FLAG_FULLSCREEN) != 0); - mNavigationColorView = updateColorViewInt(mNavigationColorView, + mNavigationColorView = updateColorViewInt(mNavigationColorView, sysUiVisibility, SYSTEM_UI_FLAG_HIDE_NAVIGATION, FLAG_TRANSLUCENT_NAVIGATION, mNavigationBarColor, mLastBottomInset, Gravity.BOTTOM, NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME, @@ -2797,9 +2790,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { false /* hiddenByWindowFlag */); } - WindowManager.LayoutParams attrs = getAttributes(); - int sysUiVisibility = attrs.systemUiVisibility | mLastWindowSystemUiVisibility; - // When we expand the window with FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, we still need // to ensure that the rest of the view hierarchy doesn't notice it, unless they've // explicitly asked for it. @@ -2807,7 +2797,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { boolean consumingNavBar = (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0 && (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0 - && (mLastSystemUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; + && (sysUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; int consumedRight = consumingNavBar ? mLastRightInset : 0; int consumedBottom = consumingNavBar ? mLastBottomInset : 0; @@ -2841,10 +2831,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { return insets; } - private View updateColorViewInt(View view, int systemUiHideFlag, int translucentFlag, - int color, int height, int verticalGravity, String transitionName, int id, - boolean hiddenByWindowFlag) { - boolean show = height > 0 && (mLastSystemUiVisibility & systemUiHideFlag) == 0 + private View updateColorViewInt(View view, int sysUiVis, int systemUiHideFlag, + int translucentFlag, int color, int height, int verticalGravity, + String transitionName, int id, boolean hiddenByWindowFlag) { + boolean show = height > 0 && (sysUiVis & systemUiHideFlag) == 0 && !hiddenByWindowFlag && (getAttributes().flags & translucentFlag) == 0 && (color & Color.BLACK) != 0 @@ -3320,7 +3310,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { setFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS & ~getForcedWindowFlags()); } - decor.setOnSystemUiVisibilityChangeListener(decor); } if (!mForcedStatusBarColor) { mStatusBarColor = a.getColor(R.styleable.Window_statusBarColor, 0xFF000000); diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index ebe21ff..24bfba6 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -3277,7 +3277,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { // But we still have not gotten the window state from the // window manager, so delay the notification until then. AccessibilityWindowInfo window = findWindowById(event.getWindowId()); - if (window == null || !window.isFocused()) { + if (window == null) { mShowingFocusedWindowEvent = AccessibilityEvent.obtain(event); return false; } @@ -3377,7 +3377,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { if (mShowingFocusedWindowEvent != null) { final int windowId = mShowingFocusedWindowEvent.getWindowId(); AccessibilityWindowInfo window = findWindowById(windowId); - if (window != null && window.isFocused()) { + if (window != null) { // Sending does the recycle. sendAccessibilityEvent(mShowingFocusedWindowEvent, mCurrentUserId); } diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index dfec307..967681b 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -1357,13 +1357,6 @@ public class ConnectivityService extends IConnectivityManager.Stub { "ConnectivityService"); } - // TODO Make this a special check when it goes public - private void enforceTetherChangePermission() { - mContext.enforceCallingOrSelfPermission( - android.Manifest.permission.CHANGE_NETWORK_STATE, - "ConnectivityService"); - } - private void enforceTetherAccessPermission() { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.ACCESS_NETWORK_STATE, @@ -2389,8 +2382,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { // javadoc from interface public int tether(String iface) { - enforceTetherChangePermission(); - + ConnectivityManager.enforceTetherChangePermission(mContext); if (isTetheringSupported()) { return mTethering.tether(iface); } else { @@ -2400,7 +2392,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { // javadoc from interface public int untether(String iface) { - enforceTetherChangePermission(); + ConnectivityManager.enforceTetherChangePermission(mContext); if (isTetheringSupported()) { return mTethering.untether(iface); @@ -2449,7 +2441,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { } public int setUsbTethering(boolean enable) { - enforceTetherChangePermission(); + ConnectivityManager.enforceTetherChangePermission(mContext); if (isTetheringSupported()) { return mTethering.setUsbTethering(enable); } else { diff --git a/services/core/java/com/android/server/SystemConfig.java b/services/core/java/com/android/server/SystemConfig.java index fdcb3b9..cf2a49f 100644 --- a/services/core/java/com/android/server/SystemConfig.java +++ b/services/core/java/com/android/server/SystemConfig.java @@ -50,19 +50,16 @@ public class SystemConfig { // These are the built-in uid -> permission mappings that were read from the // system configuration files. - final SparseArray<HashSet<String>> mSystemPermissions = - new SparseArray<HashSet<String>>(); + final SparseArray<HashSet<String>> mSystemPermissions = new SparseArray<>(); // These are the built-in shared libraries that were read from the // system configuration files. Keys are the library names; strings are the // paths to the libraries. - final ArrayMap<String, String> mSharedLibraries - = new ArrayMap<String, String>(); + final ArrayMap<String, String> mSharedLibraries = new ArrayMap<>(); // These are the features this devices supports that were read from the // system configuration files. - final HashMap<String, FeatureInfo> mAvailableFeatures = - new HashMap<String, FeatureInfo>(); + final HashMap<String, FeatureInfo> mAvailableFeatures = new HashMap<>(); public static final class PermissionEntry { public final String name; @@ -75,12 +72,14 @@ public class SystemConfig { // These are the permission -> gid mappings that were read from the // system configuration files. - final ArrayMap<String, PermissionEntry> mPermissions = - new ArrayMap<String, PermissionEntry>(); + final ArrayMap<String, PermissionEntry> mPermissions = new ArrayMap<>(); // These are the packages that are white-listed to be able to run in the // background while in power save mode, as read from the configuration files. - final ArraySet<String> mAllowInPowerSave = new ArraySet<String>(); + final ArraySet<String> mAllowInPowerSave = new ArraySet<>(); + + // These are the app package names that should not allow IME switching. + final ArraySet<String> mFixedImeApps = new ArraySet<>(); public static SystemConfig getInstance() { synchronized (SystemConfig.class) { @@ -115,6 +114,10 @@ public class SystemConfig { return mAllowInPowerSave; } + public ArraySet<String> getFixedImeApps() { + return mFixedImeApps; + } + SystemConfig() { // Read configuration from system readPermissions(Environment.buildPath( @@ -298,6 +301,17 @@ public class SystemConfig { XmlUtils.skipCurrentTag(parser); continue; + } else if ("fixed-ime-app".equals(name)) { + String pkgname = parser.getAttributeValue(null, "package"); + if (pkgname == null) { + Slog.w(TAG, "<fixed-ime-app> without package at " + + parser.getPositionDescription()); + } else { + mFixedImeApps.add(pkgname); + } + XmlUtils.skipCurrentTag(parser); + continue; + } else { XmlUtils.skipCurrentTag(parser); continue; diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index e043f03..adea271 100755 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -917,6 +917,7 @@ final class ActivityRecord { if (displayStartTime != 0) { reportLaunchTimeLocked(SystemClock.uptimeMillis()); } + mStackSupervisor.sendWaitingVisibleReportLocked(this); startTime = 0; finishLaunchTickingLocked(); if (task != null) { diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 4940493..482a582 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -650,31 +650,47 @@ public final class ActivityStackSupervisor implements DisplayListener { } void reportActivityVisibleLocked(ActivityRecord r) { + sendWaitingVisibleReportLocked(r); + notifyActivityDrawnForKeyguard(); + } + + void sendWaitingVisibleReportLocked(ActivityRecord r) { + boolean changed = false; for (int i = mWaitingActivityVisible.size()-1; i >= 0; i--) { WaitResult w = mWaitingActivityVisible.get(i); - w.timeout = false; - if (r != null) { - w.who = new ComponentName(r.info.packageName, r.info.name); + if (w.who == null) { + changed = true; + w.timeout = false; + if (r != null) { + w.who = new ComponentName(r.info.packageName, r.info.name); + } + w.totalTime = SystemClock.uptimeMillis() - w.thisTime; + w.thisTime = w.totalTime; } - w.totalTime = SystemClock.uptimeMillis() - w.thisTime; - w.thisTime = w.totalTime; } - mService.notifyAll(); - notifyActivityDrawnForKeyguard(); + if (changed) { + mService.notifyAll(); + } } void reportActivityLaunchedLocked(boolean timeout, ActivityRecord r, long thisTime, long totalTime) { + boolean changed = false; for (int i = mWaitingActivityLaunched.size() - 1; i >= 0; i--) { WaitResult w = mWaitingActivityLaunched.remove(i); - w.timeout = timeout; - if (r != null) { - w.who = new ComponentName(r.info.packageName, r.info.name); + if (w.who == null) { + changed = true; + w.timeout = timeout; + if (r != null) { + w.who = new ComponentName(r.info.packageName, r.info.name); + } + w.thisTime = thisTime; + w.totalTime = totalTime; } - w.thisTime = thisTime; - w.totalTime = totalTime; } - mService.notifyAll(); + if (changed) { + mService.notifyAll(); + } } ActivityRecord topRunningActivityLocked() { @@ -936,7 +952,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } while (!outResult.timeout && outResult.who == null); } else if (res == ActivityManager.START_TASK_TO_FRONT) { ActivityRecord r = stack.topRunningActivityLocked(null); - if (r.nowVisible) { + if (r.nowVisible && r.state == ActivityState.RESUMED) { outResult.timeout = false; outResult.who = new ComponentName(r.info.packageName, r.info.name); outResult.totalTime = 0; @@ -3673,7 +3689,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } } - private void detachLocked() { + protected void detachLocked() { if (DEBUG_STACK) Slog.d(TAG, "detachLocked: " + this + " from display=" + mActivityDisplay + " Callers=" + Debug.getCallers(2)); if (mActivityDisplay != null) { @@ -3797,12 +3813,6 @@ public final class ActivityStackSupervisor implements DisplayListener { } void onTaskListEmptyLocked() { - mHandler.removeMessages(CONTAINER_TASK_LIST_EMPTY_TIMEOUT, this); - if (!mStack.isHomeStack()) { - detachLocked(); - deleteActivityContainer(this); - } - mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget(); } @Override @@ -3891,6 +3901,13 @@ public final class ActivityStackSupervisor implements DisplayListener { return false; } + void onTaskListEmptyLocked() { + mHandler.removeMessages(CONTAINER_TASK_LIST_EMPTY_TIMEOUT, this); + detachLocked(); + deleteActivityContainer(this); + mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget(); + } + private void setSurfaceIfReadyLocked() { if (DEBUG_STACK) Slog.v(TAG, "setSurfaceIfReadyLocked: mDrawn=" + mDrawn + " mContainerState=" + mContainerState + " mSurface=" + mSurface); diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java index 4de7367..f74b795 100644 --- a/services/core/java/com/android/server/am/TaskRecord.java +++ b/services/core/java/com/android/server/am/TaskRecord.java @@ -327,8 +327,8 @@ final class TaskRecord { } } - if (intent != null && - (intent.getFlags()&Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) != 0) { + final int intentFlags = intent == null ? 0 : intent.getFlags(); + if ((intentFlags & Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) != 0) { // Once we are set to an Intent with this flag, we count this // task as having a true root activity. rootWasReset = true; @@ -338,8 +338,8 @@ final class TaskRecord { if ((info.flags & ActivityInfo.FLAG_AUTO_REMOVE_FROM_RECENTS) != 0) { // If the activity itself has requested auto-remove, then just always do it. autoRemoveRecents = true; - } else if ((intent.getFlags()&(Intent.FLAG_ACTIVITY_NEW_DOCUMENT - |Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS)) == Intent.FLAG_ACTIVITY_NEW_DOCUMENT) { + } else if ((intentFlags & (Intent.FLAG_ACTIVITY_NEW_DOCUMENT + | Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS)) == Intent.FLAG_ACTIVITY_NEW_DOCUMENT) { // If the caller has not asked for the document to be retained, then we may // want to turn on auto-remove, depending on whether the target has set its // own document launch mode. diff --git a/services/core/java/com/android/server/location/GpsLocationProvider.java b/services/core/java/com/android/server/location/GpsLocationProvider.java index df846a8..f1c5a6c 100644 --- a/services/core/java/com/android/server/location/GpsLocationProvider.java +++ b/services/core/java/com/android/server/location/GpsLocationProvider.java @@ -162,6 +162,10 @@ public class GpsLocationProvider implements LocationProviderInterface { private static final int GPS_CAPABILITY_SINGLE_SHOT = 0x0000008; private static final int GPS_CAPABILITY_ON_DEMAND_TIME = 0x0000010; + // The AGPS SUPL mode + private static final int AGPS_SUPL_MODE_MSA = 0x02; + private static final int AGPS_SUPL_MODE_MSB = 0x01; + // these need to match AGpsType enum in gps.h private static final int AGPS_TYPE_SUPL = 1; private static final int AGPS_TYPE_C2K = 2; @@ -486,12 +490,9 @@ public class GpsLocationProvider implements LocationProviderInterface { } else if (action.equals(SIM_STATE_CHANGED)) { TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); - int simState = phone.getSimState(); - Log.d(TAG, "SIM STATE CHANGED to " + simState); String mccMnc = phone.getSimOperator(); - if (simState == TelephonyManager.SIM_STATE_READY && - !TextUtils.isEmpty(mccMnc)) { - Log.d(TAG, "SIM STATE is ready, SIM MCC/MNC is " + mccMnc); + if (!TextUtils.isEmpty(mccMnc)) { + Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc); synchronized (mLock) { reloadGpsProperties(context, mProperties); mNIHandler.setSuplEsEnabled(mSuplEsEnabled); @@ -922,6 +923,39 @@ public class GpsLocationProvider implements LocationProviderInterface { } } + /** + * Checks what SUPL mode to use, according to the AGPS mode as well as the + * allowed mode from properties. + * + * @param properties GPS properties + * @param agpsEnabled whether AGPS is enabled by settings value + * @param singleShot whether "singleshot" is needed + * @return SUPL mode (MSA vs MSB vs STANDALONE) + */ + private int getSuplMode(Properties properties, boolean agpsEnabled, boolean singleShot) { + if (agpsEnabled) { + String modeString = properties.getProperty("SUPL_MODE"); + int suplMode = 0; + if (!TextUtils.isEmpty(modeString)) { + try { + suplMode = Integer.parseInt(modeString); + } catch (NumberFormatException e) { + Log.e(TAG, "unable to parse SUPL_MODE: " + modeString); + return GPS_POSITION_MODE_STANDALONE; + } + } + if (singleShot + && hasCapability(GPS_CAPABILITY_MSA) + && (suplMode & AGPS_SUPL_MODE_MSA) != 0) { + return GPS_POSITION_MODE_MS_ASSISTED; + } else if (hasCapability(GPS_CAPABILITY_MSB) + && (suplMode & AGPS_SUPL_MODE_MSB) != 0) { + return GPS_POSITION_MODE_MS_BASED; + } + } + return GPS_POSITION_MODE_STANDALONE; + } + private void handleEnable() { if (DEBUG) Log.d(TAG, "handleEnable"); @@ -1199,14 +1233,10 @@ public class GpsLocationProvider implements LocationProviderInterface { mSingleShot = singleShot; mPositionMode = GPS_POSITION_MODE_STANDALONE; - if (Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.ASSISTED_GPS_ENABLED, 1) != 0) { - if (singleShot && hasCapability(GPS_CAPABILITY_MSA)) { - mPositionMode = GPS_POSITION_MODE_MS_ASSISTED; - } else if (hasCapability(GPS_CAPABILITY_MSB)) { - mPositionMode = GPS_POSITION_MODE_MS_BASED; - } - } + boolean agpsEnabled = + (Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.ASSISTED_GPS_ENABLED, 1) != 0); + mPositionMode = getSuplMode(mProperties, agpsEnabled, singleShot); if (DEBUG) { String mode; diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index d4bcd5c..0c51160 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -328,6 +328,7 @@ class DisplayContent { for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx) { AppWindowToken wtoken = tokens.get(tokenNdx); if (wtoken.mDeferRemoval) { + stack.mExitingAppTokens.remove(wtoken); wtoken.mDeferRemoval = false; mService.removeAppFromTaskLocked(wtoken); } diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/DatabaseHelper.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/DatabaseHelper.java index cc0d8df..9c15f2b 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/DatabaseHelper.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/DatabaseHelper.java @@ -24,10 +24,10 @@ import android.database.sqlite.SQLiteOpenHelper; import android.hardware.soundtrigger.SoundTrigger; import android.hardware.soundtrigger.SoundTrigger.Keyphrase; import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel; -import android.os.UserManager; import android.text.TextUtils; import android.util.Slog; +import java.util.Locale; import java.util.UUID; /** @@ -37,8 +37,7 @@ import java.util.UUID; */ public class DatabaseHelper extends SQLiteOpenHelper { static final String TAG = "SoundModelDBHelper"; - // TODO: Set to false. - static final boolean DBG = true; + static final boolean DBG = false; private static final String NAME = "sound_model.db"; private static final int VERSION = 4; @@ -67,11 +66,8 @@ public class DatabaseHelper extends SQLiteOpenHelper { + SoundModelContract.KEY_HINT_TEXT + " TEXT," + SoundModelContract.KEY_USERS + " TEXT" + ")"; - private final UserManager mUserManager; - public DatabaseHelper(Context context) { super(context, NAME, null, VERSION); - mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); } @Override @@ -122,17 +118,20 @@ public class DatabaseHelper extends SQLiteOpenHelper { /** * Deletes the sound model and associated keyphrases. */ - public boolean deleteKeyphraseSoundModel(UUID modelUuid) { - if (modelUuid == null) { - Slog.w(TAG, "Model UUID must be specified for deletion"); - return false; - } - + public boolean deleteKeyphraseSoundModel(int keyphraseId, int userHandle, String bcp47Locale) { + // Sanitize the locale to guard against SQL injection. + bcp47Locale = Locale.forLanguageTag(bcp47Locale).toLanguageTag(); synchronized(this) { - SQLiteDatabase db = getWritableDatabase(); - String soundModelClause = SoundModelContract.KEY_MODEL_UUID + "='" - + modelUuid.toString() + "'"; + KeyphraseSoundModel soundModel = getKeyphraseSoundModel(keyphraseId, userHandle, + bcp47Locale); + if (soundModel == null) { + return false; + } + // Delete all sound models for the given keyphrase and specified user. + SQLiteDatabase db = getWritableDatabase(); + String soundModelClause = SoundModelContract.KEY_MODEL_UUID + + "='" + soundModel.uuid.toString() + "'"; try { return db.delete(SoundModelContract.TABLE, soundModelClause, null) != 0; } finally { @@ -147,11 +146,15 @@ public class DatabaseHelper extends SQLiteOpenHelper { * * TODO: We only support one keyphrase currently. */ - public KeyphraseSoundModel getKeyphraseSoundModel(int keyphraseId) { + public KeyphraseSoundModel getKeyphraseSoundModel(int keyphraseId, int userHandle, + String bcp47Locale) { + // Sanitize the locale to guard against SQL injection. + bcp47Locale = Locale.forLanguageTag(bcp47Locale).toLanguageTag(); synchronized(this) { // Find the corresponding sound model ID for the keyphrase. String selectQuery = "SELECT * FROM " + SoundModelContract.TABLE - + " WHERE " + SoundModelContract.KEY_KEYPHRASE_ID + " = '" + keyphraseId + "'"; + + " WHERE " + SoundModelContract.KEY_KEYPHRASE_ID + "= '" + keyphraseId + + "' AND " + SoundModelContract.KEY_LOCALE + "='" + bcp47Locale + "'"; SQLiteDatabase db = getReadableDatabase(); Cursor c = db.rawQuery(selectQuery, null); @@ -160,14 +163,16 @@ public class DatabaseHelper extends SQLiteOpenHelper { do { int type = c.getInt(c.getColumnIndex(SoundModelContract.KEY_TYPE)); if (type != SoundTrigger.SoundModel.TYPE_KEYPHRASE) { - Slog.w(TAG, "Ignoring sound model since it's type is incorrect"); + if (DBG) { + Slog.w(TAG, "Ignoring SoundModel since it's type is incorrect"); + } continue; } String modelUuid = c.getString( c.getColumnIndex(SoundModelContract.KEY_MODEL_UUID)); if (modelUuid == null) { - Slog.w(TAG, "Ignoring sound model since it doesn't specify an ID"); + Slog.w(TAG, "Ignoring SoundModel since it doesn't specify an ID"); continue; } @@ -176,7 +181,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { c.getColumnIndex(SoundModelContract.KEY_RECOGNITION_MODES)); int[] users = getArrayForCommaSeparatedString( c.getString(c.getColumnIndex(SoundModelContract.KEY_USERS))); - String locale = c.getString( + String modelLocale = c.getString( c.getColumnIndex(SoundModelContract.KEY_LOCALE)); String text = c.getString( c.getColumnIndex(SoundModelContract.KEY_HINT_TEXT)); @@ -184,28 +189,37 @@ public class DatabaseHelper extends SQLiteOpenHelper { // Only add keyphrases meant for the current user. if (users == null) { // No users present in the keyphrase. - Slog.w(TAG, "Ignoring keyphrase since it doesn't specify users"); + Slog.w(TAG, "Ignoring SoundModel since it doesn't specify users"); continue; } boolean isAvailableForCurrentUser = false; - int currentUser = mUserManager.getUserHandle(); for (int user : users) { - if (currentUser == user) { + if (userHandle == user) { isAvailableForCurrentUser = true; break; } } if (!isAvailableForCurrentUser) { - Slog.w(TAG, "Ignoring keyphrase since it's not for the current user"); + if (DBG) { + Slog.w(TAG, "Ignoring SoundModel since user handles don't match"); + } continue; + } else { + if (DBG) Slog.d(TAG, "Found a SoundModel for user: " + userHandle); } Keyphrase[] keyphrases = new Keyphrase[1]; keyphrases[0] = new Keyphrase( - keyphraseId, recognitionModes, locale, text, users); - return new KeyphraseSoundModel(UUID.fromString(modelUuid), + keyphraseId, recognitionModes, modelLocale, text, users); + KeyphraseSoundModel model = new KeyphraseSoundModel( + UUID.fromString(modelUuid), null /* FIXME use vendor UUID */, data, keyphrases); + if (DBG) { + Slog.d(TAG, "Found SoundModel for the given keyphrase/locale/user: " + + model); + } + return model; } while (c.moveToNext()); } Slog.w(TAG, "No SoundModel available for the given keyphrase"); @@ -218,15 +232,17 @@ public class DatabaseHelper extends SQLiteOpenHelper { } private static String getCommaSeparatedString(int[] users) { - if (users == null || users.length == 0) { + if (users == null) { return ""; } - String csv = ""; - for (int user : users) { - csv += String.valueOf(user); - csv += ","; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < users.length; i++) { + if (i != 0) { + sb.append(','); + } + sb.append(users[i]); } - return csv.substring(0, csv.length() - 1); + return sb.toString(); } private static int[] getArrayForCommaSeparatedString(String text) { diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/SoundTriggerHelper.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/SoundTriggerHelper.java index ad38b22..8ce7f74 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/SoundTriggerHelper.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/SoundTriggerHelper.java @@ -50,8 +50,7 @@ import java.util.UUID; */ public class SoundTriggerHelper implements SoundTrigger.StatusListener { static final String TAG = "SoundTriggerHelper"; - // TODO: Set to false. - static final boolean DBG = true; + static final boolean DBG = false; /** * Return codes for {@link #startRecognition(int, KeyphraseSoundModel, @@ -166,8 +165,14 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { } } + // Unload the previous model if the current one isn't invalid + // and, it's not the same as the new one, or we are already started + // if we are already started, we can get multiple calls to start + // if the underlying sound model changes, in which case we should unload and reload. + // The model reuse helps only in cases when we trigger and stop internally + // without a start recognition call. if (mCurrentSoundModelHandle != INVALID_VALUE - && !soundModel.uuid.equals(mCurrentSoundModelUuid)) { + && (!soundModel.uuid.equals(mCurrentSoundModelUuid) || mStarted)) { Slog.w(TAG, "Unloading previous sound model"); int status = mModule.unloadSoundModel(mCurrentSoundModelHandle); if (status != SoundTrigger.STATUS_OK) { diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index 7c7b732..82b7f8b 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -446,7 +446,7 @@ public class VoiceInteractionManagerService extends SystemService { //----------------- Model management APIs --------------------------------// @Override - public KeyphraseSoundModel getKeyphraseSoundModel(int keyphraseId) { + public KeyphraseSoundModel getKeyphraseSoundModel(int keyphraseId, String bcp47Locale) { synchronized (this) { if (mContext.checkCallingPermission(Manifest.permission.MANAGE_VOICE_KEYPHRASES) != PackageManager.PERMISSION_GRANTED) { @@ -455,9 +455,14 @@ public class VoiceInteractionManagerService extends SystemService { } } + if (bcp47Locale == null) { + throw new IllegalArgumentException("Illegal argument(s) in getKeyphraseSoundModel"); + } + + final int callingUid = UserHandle.getCallingUserId(); final long caller = Binder.clearCallingIdentity(); try { - return mDbHelper.getKeyphraseSoundModel(keyphraseId); + return mDbHelper.getKeyphraseSoundModel(keyphraseId, callingUid, bcp47Locale); } finally { Binder.restoreCallingIdentity(caller); } @@ -495,7 +500,7 @@ public class VoiceInteractionManagerService extends SystemService { } @Override - public int deleteKeyphraseSoundModel(int keyphraseId) { + public int deleteKeyphraseSoundModel(int keyphraseId, String bcp47Locale) { synchronized (this) { if (mContext.checkCallingPermission(Manifest.permission.MANAGE_VOICE_KEYPHRASES) != PackageManager.PERMISSION_GRANTED) { @@ -504,13 +509,16 @@ public class VoiceInteractionManagerService extends SystemService { } } + if (bcp47Locale == null) { + throw new IllegalArgumentException( + "Illegal argument(s) in deleteKeyphraseSoundModel"); + } + + final int callingUid = UserHandle.getCallingUserId(); final long caller = Binder.clearCallingIdentity(); boolean deleted = false; try { - KeyphraseSoundModel soundModel = mDbHelper.getKeyphraseSoundModel(keyphraseId); - if (soundModel != null) { - deleted = mDbHelper.deleteKeyphraseSoundModel(soundModel.uuid); - } + deleted = mDbHelper.deleteKeyphraseSoundModel(keyphraseId, callingUid, bcp47Locale); return deleted ? SoundTriggerHelper.STATUS_OK : SoundTriggerHelper.STATUS_ERROR; } finally { if (deleted) { @@ -527,7 +535,8 @@ public class VoiceInteractionManagerService extends SystemService { //----------------- SoundTrigger APIs --------------------------------// @Override - public boolean isEnrolledForKeyphrase(IVoiceInteractionService service, int keyphraseId) { + public boolean isEnrolledForKeyphrase(IVoiceInteractionService service, int keyphraseId, + String bcp47Locale) { synchronized (this) { if (mImpl == null || mImpl.mService == null || service.asBinder() != mImpl.mService.asBinder()) { @@ -536,9 +545,15 @@ public class VoiceInteractionManagerService extends SystemService { } } + if (bcp47Locale == null) { + throw new IllegalArgumentException("Illegal argument(s) in isEnrolledForKeyphrase"); + } + + final int callingUid = UserHandle.getCallingUserId(); final long caller = Binder.clearCallingIdentity(); try { - KeyphraseSoundModel model = mDbHelper.getKeyphraseSoundModel(keyphraseId); + KeyphraseSoundModel model = + mDbHelper.getKeyphraseSoundModel(keyphraseId, callingUid, bcp47Locale); return model != null; } finally { Binder.restoreCallingIdentity(caller); @@ -566,7 +581,8 @@ public class VoiceInteractionManagerService extends SystemService { @Override public int startRecognition(IVoiceInteractionService service, int keyphraseId, - IRecognitionStatusCallback callback, RecognitionConfig recognitionConfig) { + String bcp47Locale, IRecognitionStatusCallback callback, + RecognitionConfig recognitionConfig) { // Allow the call if this is the current voice interaction service. synchronized (this) { if (mImpl == null || mImpl.mService == null @@ -575,14 +591,16 @@ public class VoiceInteractionManagerService extends SystemService { "Caller is not the current voice interaction service"); } - if (callback == null || recognitionConfig == null) { + if (callback == null || recognitionConfig == null || bcp47Locale == null) { throw new IllegalArgumentException("Illegal argument(s) in startRecognition"); } } + int callingUid = UserHandle.getCallingUserId(); final long caller = Binder.clearCallingIdentity(); try { - KeyphraseSoundModel soundModel = mDbHelper.getKeyphraseSoundModel(keyphraseId); + KeyphraseSoundModel soundModel = + mDbHelper.getKeyphraseSoundModel(keyphraseId, callingUid, bcp47Locale); if (soundModel == null || soundModel.uuid == null || soundModel.keyphrases == null) { |