diff options
9 files changed, 94 insertions, 31 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 369a18fe..654e5d1c 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -22,9 +22,6 @@ <uses-permission android:name="com.google.android.permission.INSTALL_WEARABLE_PACKAGES" /> - <!-- Needed for passing extras with intent ACTION_SHOW_ADMIN_SUPPORT_DETAILS --> - <uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" /> - <application android:label="@string/app_name" android:allowBackup="false" android:theme="@style/Theme.DialogWhenLarge" diff --git a/res/layout/grant_permissions.xml b/res/layout/grant_permissions.xml index abb219a5..8ed9c5d6 100644 --- a/res/layout/grant_permissions.xml +++ b/res/layout/grant_permissions.xml @@ -25,6 +25,9 @@ android:paddingBottom="32dp" android:clipToPadding="false"> + <ScrollView android:layout_width="wrap_content" + android:layout_height="wrap_content"> + <LinearLayout android:id="@+id/dialog_container" android:layout_width="wrap_content" @@ -116,4 +119,6 @@ </LinearLayout> + </ScrollView> + </com.android.packageinstaller.permission.ui.ManualLayoutFrame> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 26293534..9149bc93 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -79,7 +79,7 @@ <string name="Parse_error_dlg_text" msgid="7623286983621067011">"पैकेज को पार्स करने में कोई समस्या थी."</string> <string name="newPerms" msgid="6039428254474104210">"नया"</string> <string name="allPerms" msgid="1024385515840703981">"सभी"</string> - <string name="privacyPerms" msgid="1850527049572617">"निजता"</string> + <string name="privacyPerms" msgid="1850527049572617">"गोपनीयता"</string> <string name="devicePerms" msgid="6733560207731294504">"डिवाइस पहुंच"</string> <string name="no_new_perms" msgid="6657813692169565975">"इस नई जानकारी के लिए अनुमति की आवश्यकता नहीं है."</string> <string name="grant_confirm_question" msgid="4690289297029223742">"क्या आप निम्नलिखित के लिए अनुमति देना चाहते हैं ? इसे इन पर एक्सेस प्राप्त होगी:"</string> diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml index d986bfba..4a64b97c 100644 --- a/res/values-kn-rIN/strings.xml +++ b/res/values-kn-rIN/strings.xml @@ -22,7 +22,7 @@ <string name="done" msgid="3889387558374211719">"ಮುಗಿದಿದೆ"</string> <string name="security_settings_desc" msgid="2706691034244052604">"ಇದಕ್ಕಾಗಿ ಈ ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿಸಿ:"</string> <string name="cancel" msgid="8360346460165114585">"ರದ್ದುಮಾಡು"</string> - <string name="unknown" msgid="4742479012767208045">"ಅಪರಿಚಿತ"</string> + <string name="unknown" msgid="4742479012767208045">"ಅಜ್ಞಾತ"</string> <string name="installing" msgid="8613631001631998372">"ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ…"</string> <string name="install_done" msgid="3682715442154357097">"ಅಪ್ಲಿಕೇಶನ್ ಸ್ಥಾಪಿಸಲಾಗಿದೆ."</string> <string name="install_confirm_question" msgid="7295206719219043890">"ನೀವು ಈ ಅಪ್ಲಿಕೇಶನ್ ಸ್ಥಾಪಿಸಲು ಬಯಸುವಿರಾ? ಇದು ಇಲ್ಲಿಗೆ ಪ್ರವೇಶ ಪಡೆದುಕೊಳ್ಳುತ್ತದೆ:"</string> @@ -42,9 +42,9 @@ <string name="install_failed_msg" product="tv" msgid="3990457938384021566">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಅನ್ನು ನಿಮ್ಮ ಟಿವಿಗೆ ಸ್ಥಾಪಿಸಲಾಗುವುದಿಲ್ಲ."</string> <string name="install_failed_msg" product="default" msgid="8554909560982962052">"ನಿಮ್ಮ ಫೋನ್ನಲ್ಲಿ <xliff:g id="APP_NAME">%1$s</xliff:g> ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string> <string name="launch" msgid="4826921505917605463">"ತೆರೆ"</string> - <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"ರಕ್ಷಣೆಯ ದೃಷ್ಟಿಯಿಂದ, ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ನು ಅಪರಿಚಿತ ಮೂಲಗಳಿಂದ ಪಡೆದುಕೊಳ್ಳುವ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಸ್ಥಾಪನೆಯನ್ನು ನಿರ್ಬಂಧಿಸುವಂತೆ ಹೊಂದಿಸಲಾಗಿದೆ."</string> - <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"ರಕ್ಷಣೆಯ ದೃಷ್ಟಿಯಿಂದ, ನಿಮ್ಮ ಟಿವಿ ಅನ್ನು ಅಪರಿಚಿತ ಮೂಲಗಳಿಂದ ಪಡೆದುಕೊಳ್ಳುವ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಸ್ಥಾಪನೆಯನ್ನು ನಿರ್ಬಂಧಿಸುವಂತೆ ಹೊಂದಿಸಲಾಗಿದೆ."</string> - <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"ರಕ್ಷಣೆಯ ದೃಷ್ಟಿಯಿಂದ, ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅಪರಿಚಿತ ಮೂಲಗಳಿಂದ ಪಡೆದುಕೊಳ್ಳುವ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಸ್ಥಾಪನೆಯನ್ನು ನಿರ್ಬಂಧಿಸುವಂತೆ ಹೊಂದಿಸಲಾಗಿದೆ."</string> + <string name="unknown_apps_dlg_text" product="tablet" msgid="7504186369474734767">"ರಕ್ಷಣೆಯ ದೃಷ್ಟಿಯಿಂದ, ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ನು ಅಜ್ಞಾತ ಮೂಲಗಳಿಂದ ಪಡೆದುಕೊಳ್ಳುವ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಸ್ಥಾಪನೆಯನ್ನು ನಿರ್ಬಂಧಿಸುವಂತೆ ಹೊಂದಿಸಲಾಗಿದೆ."</string> + <string name="unknown_apps_dlg_text" product="tv" msgid="7195713985140602351">"ರಕ್ಷಣೆಯ ದೃಷ್ಟಿಯಿಂದ, ನಿಮ್ಮ ಟಿವಿ ಅನ್ನು ಅಜ್ಞಾತ ಮೂಲಗಳಿಂದ ಪಡೆದುಕೊಳ್ಳುವ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಸ್ಥಾಪನೆಯನ್ನು ನಿರ್ಬಂಧಿಸುವಂತೆ ಹೊಂದಿಸಲಾಗಿದೆ."</string> + <string name="unknown_apps_dlg_text" product="default" msgid="133213135679009316">"ರಕ್ಷಣೆಯ ದೃಷ್ಟಿಯಿಂದ, ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅಜ್ಞಾತ ಮೂಲಗಳಿಂದ ಪಡೆದುಕೊಳ್ಳುವ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಸ್ಥಾಪನೆಯನ್ನು ನಿರ್ಬಂಧಿಸುವಂತೆ ಹೊಂದಿಸಲಾಗಿದೆ."</string> <string name="unknown_apps_admin_dlg_text" msgid="1189146324736698462">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಅಪರಿಚಿತ ಮೂಲಗಳಿಂದ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಸ್ಥಾಪನೆಯನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ."</string> <string name="ok" msgid="3468756155452870475">"ಸರಿ"</string> <string name="settings" msgid="6743583734099755409">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> @@ -98,7 +98,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ಇನ್ನಷ್ಟು</item> </plurals> <string name="old_sdk_deny_warning" msgid="3872277112584842615">"ಈ ಅಪ್ಲಿಕೇಶನ್ Android ನ ಹಳೆಯ ಆವೃತ್ತಿಗೆ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿತ್ತು. ಅನುಮತಿ ನಿರಾಕರಿಸುವಿಕೆ ಇನ್ನು ಮುಂದೆ ಉದ್ದೇಶಿಸಲ್ಪಟ್ಟಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸದೆ ಇರುವುದಕ್ಕೆ ಇದು ಕಾರಣವಾಗಬಹುದು."</string> - <string name="default_permission_description" msgid="4992892207044156668">"ಅಪರಿಚಿತ ಕ್ರಿಯೆಯನ್ನು ಮಾಡಿ"</string> + <string name="default_permission_description" msgid="4992892207044156668">"ಅಜ್ಞಾತ ಕ್ರಿಯೆಯನ್ನು ಮಾಡಿ"</string> <string name="app_permissions_group_summary" msgid="4787239772223699263">"<xliff:g id="COUNT_1">%2$d</xliff:g> ನಲ್ಲಿ <xliff:g id="COUNT_0">%1$d</xliff:g> ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ"</string> <string name="menu_show_system" msgid="6773743421743728921">"ಸಿಸ್ಟಂ ತೋರಿಸು"</string> <string name="menu_hide_system" msgid="7595471742649432977">"ಸಿಸ್ಟಮ್ ಮರೆಮಾಡು"</string> diff --git a/src/com/android/packageinstaller/InstallAppProgress.java b/src/com/android/packageinstaller/InstallAppProgress.java index a2bbfc0c..49d91cf1 100755 --- a/src/com/android/packageinstaller/InstallAppProgress.java +++ b/src/com/android/packageinstaller/InstallAppProgress.java @@ -35,6 +35,7 @@ import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageParser; +import android.content.pm.PackageParser.PackageLite; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Bundle; @@ -49,6 +50,8 @@ import android.widget.ProgressBar; import android.widget.TextView; import com.android.packageinstaller.permission.utils.IoUtils; +import com.android.internal.content.PackageHelper; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -356,9 +359,18 @@ public class InstallAppProgress extends Activity implements View.OnClickListener File file = new File(mPackageURI.getPath()); try { - params.setInstallLocation(PackageParser.parsePackageLite(file, 0).installLocation); + PackageLite pkg = PackageParser.parsePackageLite(file, 0); + params.setAppPackageName(pkg.packageName); + params.setInstallLocation(pkg.installLocation); + params.setSize( + PackageHelper.calculateInstalledSize(pkg, false, params.abiOverride)); } catch (PackageParser.PackageParserException e) { Log.e(TAG, "Cannot parse package " + file + ". Assuming defaults."); + Log.e(TAG, "Cannot calculate installed size " + file + ". Try only apk size."); + params.setSize(file.length()); + } catch (IOException e) { + Log.e(TAG, "Cannot calculate installed size " + file + ". Try only apk size."); + params.setSize(file.length()); } mInstallHandler.post(new Runnable() { diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java index 50ef0bf0..55a1f814 100644 --- a/src/com/android/packageinstaller/PackageInstallerActivity.java +++ b/src/com/android/packageinstaller/PackageInstallerActivity.java @@ -120,6 +120,9 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen private static final int DLG_NOT_SUPPORTED_ON_WEAR = DLG_BASE + 7; private void startInstallConfirm() { + ((TextView) findViewById(R.id.install_confirm_question)) + .setText(R.string.install_confirm_question); + findViewById(R.id.spacer).setVisibility(View.GONE); TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); tabHost.setup(); tabHost.setVisibility(View.VISIBLE); @@ -324,7 +327,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen // whether the untrusted sources setting is on. This allows partners to // implement a "allow untrusted source once" feature. if (request == REQUEST_ENABLE_UNKNOWN_SOURCES && result == RESULT_OK) { - initiateInstall(); + checkIfAllowedAndInitiateInstall(true); } else { clearCachedApkIfNeededAndFinish(); } @@ -454,11 +457,26 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen mOk.setOnClickListener(this); mCancel.setOnClickListener(this); + boolean wasSetUp = processPackageUri(packageUri); + if (!wasSetUp) { + return; + } + + checkIfAllowedAndInitiateInstall(false); + } + + /** + * Check if it is allowed to install the package and initiate install if allowed. If not allowed + * show the appropriate dialog. + * + * @param ignoreUnknownSourcesSettings Ignore {@link #isUnknownSourcesEnabled()} and proceed + * even if this would prevented installation. + */ + private void checkIfAllowedAndInitiateInstall(boolean ignoreUnknownSourcesSettings) { // Block the install attempt on the Unknown Sources setting if necessary. - final boolean requestFromUnknownSource = isInstallRequestFromUnknownSource(intent); + final boolean requestFromUnknownSource = isInstallRequestFromUnknownSource(getIntent()); if (!requestFromUnknownSource) { - processPackageUri(packageUri); - return; + initiateInstall(); } // If the admin prohibits it, or we're running in a managed profile, just show error @@ -467,7 +485,11 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen if (isUnknownSourcesDisallowed()) { if ((mUserManager.getUserRestrictionSource(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES, Process.myUserHandle()) & UserManager.RESTRICTION_SOURCE_SYSTEM) != 0) { - showDialogInner(DLG_UNKNOWN_SOURCES); + if (ignoreUnknownSourcesSettings) { + initiateInstall(); + } else { + showDialogInner(DLG_UNKNOWN_SOURCES); + } } else { startActivity(new Intent(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS)); clearCachedApkIfNeededAndFinish(); @@ -475,11 +497,14 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen } else if (!isUnknownSourcesEnabled() && isManagedProfile) { showDialogInner(DLG_ADMIN_RESTRICTS_UNKNOWN_SOURCES); } else if (!isUnknownSourcesEnabled()) { - // Ask user to enable setting first - - showDialogInner(DLG_UNKNOWN_SOURCES); + if (ignoreUnknownSourcesSettings) { + initiateInstall(); + } else { + // Ask user to enable setting first + showDialogInner(DLG_UNKNOWN_SOURCES); + } } else { - processPackageUri(packageUri); + initiateInstall(); } } @@ -492,7 +517,14 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen super.onDestroy(); } - private void processPackageUri(final Uri packageUri) { + /** + * Parse the Uri and set up the installer for this package. + * + * @param packageUri The URI to parse + * + * @return {@code true} iff the installer could be set up + */ + private boolean processPackageUri(final Uri packageUri) { mPackageURI = packageUri; final String scheme = packageUri.getScheme(); @@ -511,7 +543,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen + " not available. Discontinuing installation"); showDialogInner(DLG_PACKAGE_ERROR); setPmResult(PackageManager.INSTALL_FAILED_INVALID_APK); - return; + return false; } as = new PackageUtil.AppSnippet(mPm.getApplicationLabel(mPkgInfo.applicationInfo), mPm.getApplicationIcon(mPkgInfo.applicationInfo)); @@ -526,7 +558,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen Log.w(TAG, "Parse error when parsing manifest. Discontinuing installation"); showDialogInner(DLG_PACKAGE_ERROR); setPmResult(PackageManager.INSTALL_FAILED_INVALID_APK); - return; + return false; } mPkgInfo = PackageParser.generatePackageInfo(parsed, null, PackageManager.GET_PERMISSIONS, 0, 0, null, @@ -537,20 +569,20 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen case SCHEME_CONTENT: { mStagingAsynTask = new StagingAsyncTask(); mStagingAsynTask.execute(packageUri); - return; + return false; } default: { Log.w(TAG, "Unsupported scheme " + scheme); setPmResult(PackageManager.INSTALL_FAILED_INVALID_URI); clearCachedApkIfNeededAndFinish(); - return; + return false; } } PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet); - initiateInstall(); + return true; } /** Get the ApplicationInfo for the calling package, if available */ @@ -776,7 +808,11 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen } mContentUriApkStagingFile = file; Uri fileUri = Uri.fromFile(file); - processPackageUri(fileUri); + + boolean wasSetUp = processPackageUri(fileUri); + if (wasSetUp) { + checkIfAllowedAndInitiateInstall(false); + } } @Override diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index c4471be6..b1347295 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -196,10 +196,12 @@ public class GrantPermissionsActivity extends OverlayTouchActivity // window height needed to show all content. We have to // re-add the window to force it to be resized if needed. View decor = getWindow().getDecorView(); - getWindowManager().removeViewImmediate(decor); - getWindowManager().addView(decor, decor.getLayoutParams()); - if (mViewHandler instanceof GrantPermissionsViewHandlerImpl) { - ((GrantPermissionsViewHandlerImpl) mViewHandler).onConfigurationChanged(); + if (decor.getParent() != null) { + getWindowManager().removeViewImmediate(decor); + getWindowManager().addView(decor, decor.getLayoutParams()); + if (mViewHandler instanceof GrantPermissionsViewHandlerImpl) { + ((GrantPermissionsViewHandlerImpl) mViewHandler).onConfigurationChanged(); + } } } diff --git a/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java b/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java index a20c9523..0b07c806 100644 --- a/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java +++ b/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java @@ -61,8 +61,13 @@ public class ManualLayoutFrame extends ViewGroup { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + // We want to keep the content bottom at the same place to avoid movement of the "Allow" + // button. + // Try to keep the content bottom at the same height. If this would move the dialog out of + // the top of the screen move it down as much as possible, then keep it at that position for + // the rest of the sequence of permission dialogs. View content = getChildAt(0); - if (mContentBottom == 0) { + if (mContentBottom == 0 || content.getMeasuredHeight() > mContentBottom) { mContentBottom = (getMeasuredHeight() + content.getMeasuredHeight()) / 2; } final int contentLeft = (getMeasuredWidth() - content.getMeasuredWidth()) / 2; diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java index 1a21f2de..8fe96c97 100644 --- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java @@ -177,6 +177,8 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple setPreferenceScreen(screen); } + screen.setOrderingAsAdded(false); + ArraySet<String> preferencesToRemove = new ArraySet<>(); for (int i = 0, n = screen.getPreferenceCount(); i < n; i++) { preferencesToRemove.add(screen.getPreference(i).getKey()); @@ -195,6 +197,10 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple continue; } + if (!app.getAppInfo().enabled) { + continue; + } + String key = app.getKey(); preferencesToRemove.remove(key); Preference existingPref = screen.findPreference(key); |