summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml3
-rw-r--r--res/layout/grant_permissions.xml5
-rw-r--r--res/values-hi/strings.xml2
-rw-r--r--res/values-kn-rIN/strings.xml10
-rwxr-xr-xsrc/com/android/packageinstaller/InstallAppProgress.java14
-rw-r--r--src/com/android/packageinstaller/PackageInstallerActivity.java68
-rw-r--r--src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java10
-rw-r--r--src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java7
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java6
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);