diff options
author | Svet Ganov <svetoslavganov@google.com> | 2016-03-06 00:10:31 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-03-06 00:10:31 +0000 |
commit | 6d1b4fb634c5408f5655962a735a3159bb203540 (patch) | |
tree | f161becf295c921f02665cb073afe2bf7540b8b7 | |
parent | 01d4a09ec1db9cb374065c7674f33f57854b2efd (diff) | |
parent | cad9c72d25a24ae5bd1d4c34c4487c74611205d8 (diff) | |
download | android_packages_apps_PackageInstaller-6d1b4fb634c5408f5655962a735a3159bb203540.tar.gz android_packages_apps_PackageInstaller-6d1b4fb634c5408f5655962a735a3159bb203540.tar.bz2 android_packages_apps_PackageInstaller-6d1b4fb634c5408f5655962a735a3159bb203540.zip |
Merge "Support app install from a content URI" into nyc-dev am: cc975c2d6e
am: cad9c72d25
* commit 'cad9c72d25a24ae5bd1d4c34c4487c74611205d8':
Support app install from a content URI
21 files changed, 254 insertions, 90 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index fdf005ca..af47f925 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -40,6 +40,7 @@ <action android:name="android.intent.action.INSTALL_PACKAGE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="file" /> + <data android:scheme="content" /> <data android:mimeType="application/vnd.android.package-archive" /> </intent-filter> <intent-filter> @@ -47,6 +48,7 @@ <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="file" /> <data android:scheme="package" /> + <data android:scheme="content" /> </intent-filter> <intent-filter> <action android:name="android.content.pm.action.CONFIRM_PERMISSIONS" /> diff --git a/res/drawable/ic_file_download.xml b/res/drawable/ic_file_download.xml new file mode 100644 index 00000000..7ea91f5b --- /dev/null +++ b/res/drawable/ic_file_download.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2016 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="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + <path + android:fillColor="#000000" + android:pathData="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z" /> + <path + android:pathData="M0 0h24v24H0z" /> +</vector> diff --git a/res/values/strings.xml b/res/values/strings.xml index 38e27cb1..d8dadf75 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -293,4 +293,10 @@ <!-- Title for the category listing the current permissions used by an app. --> <string name="current_permissions_category">Current permissions</string> + <!-- Message that the app to be installed is being staged --> + <string name="message_staging">Staging app…</string> + + <!-- Placeholder for an app name when it is unknown --> + <string name="app_name_unknown">Unknown</string> + </resources> diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java index 79500e6e..cfa3dc24 100644 --- a/src/com/android/packageinstaller/PackageInstallerActivity.java +++ b/src/com/android/packageinstaller/PackageInstallerActivity.java @@ -33,7 +33,9 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageParser; import android.content.pm.PackageUserState; import android.content.pm.VerificationParams; +import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.UserManager; @@ -46,10 +48,16 @@ import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AppSecurityPermissions; import android.widget.Button; +import android.widget.ImageView; import android.widget.TabHost; import android.widget.TextView; +import com.android.packageinstaller.util.Utils; import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; /* * This activity is launched when a new application is installed via side loading @@ -65,12 +73,20 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen private static final String TAG = "PackageInstaller"; private static final int REQUEST_ENABLE_UNKNOWN_SOURCES = 1; + private static final int REQUEST_INSTALL_PACKAGE = 2; + + private static final String SCHEME_FILE = "file"; + private static final String SCHEME_CONTENT = "content"; + private static final String SCHEME_PACKAGE = "package"; private int mSessionId = -1; private Uri mPackageURI; private Uri mOriginatingURI; private Uri mReferrerURI; private int mOriginatingUid = VerificationParams.NO_UID; + private File mContentUriApkStagingFile; + + private AsyncTask<Uri, Void, File> mStagingAsynTask; private boolean localLOGV = false; PackageManager mPm; @@ -108,6 +124,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen private void startInstallConfirm() { TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); tabHost.setup(); + tabHost.setVisibility(View.VISIBLE); ViewPager viewPager = (ViewPager)findViewById(R.id.pager); TabsAdapter adapter = new TabsAdapter(this, tabHost, viewPager); // If the app supports runtime permissions the new permissions will @@ -183,10 +200,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen ((TextView)findViewById(R.id.install_confirm_question)).setText(msg); } mInstallConfirm.setVisibility(View.VISIBLE); - mOk = (Button)findViewById(R.id.ok_button); - mCancel = (Button)findViewById(R.id.cancel_button); - mOk.setOnClickListener(this); - mCancel.setOnClickListener(this); + mOk.setEnabled(true); if (mScrollView == null) { // There is nothing to scroll view, so the ok button is immediately // set to install. @@ -320,14 +334,14 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { setResult(RESULT_OK); - finish(); + clearCachedApkIfNeededAndFinish(); } }) .setOnCancelListener(this) .create(); } return null; - } + } private void launchSecuritySettings() { Intent launchSettingsIntent = new Intent(Settings.ACTION_SECURITY_SETTINGS); @@ -341,9 +355,8 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen // implement a "allow untrusted source once" feature. if (request == REQUEST_ENABLE_UNKNOWN_SOURCES && result == RESULT_OK) { initiateInstall(); - } else { - finish(); } + clearCachedApkIfNeededAndFinish(); } private boolean isInstallRequestFromUnknownSource(Intent intent) { @@ -430,6 +443,10 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen mUserManager = (UserManager) getSystemService(Context.USER_SERVICE); final Intent intent = getIntent(); + mOriginatingUid = getOriginatingUid(intent); + + final Uri packageUri; + if (PackageInstaller.ACTION_CONFIRM_PERMISSIONS.equals(intent.getAction())) { final int sessionId = intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1); final PackageInstaller.SessionInfo info = mInstaller.getSessionInfo(sessionId); @@ -440,72 +457,29 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen } mSessionId = sessionId; - mPackageURI = Uri.fromFile(new File(info.resolvedBaseCodePath)); + packageUri = Uri.fromFile(new File(info.resolvedBaseCodePath)); mOriginatingURI = null; mReferrerURI = null; } else { mSessionId = -1; - mPackageURI = intent.getData(); + packageUri = intent.getData(); mOriginatingURI = intent.getParcelableExtra(Intent.EXTRA_ORIGINATING_URI); mReferrerURI = intent.getParcelableExtra(Intent.EXTRA_REFERRER); } - final boolean unknownSourcesAllowedByAdmin = isUnknownSourcesAllowedByAdmin(); - final boolean unknownSourcesAllowedByUser = isUnknownSourcesEnabled(); - if (DeviceUtils.isWear(this)) { showDialogInner(DLG_NOT_SUPPORTED_ON_WEAR); return; } - final String scheme = mPackageURI.getScheme(); - if (scheme != null && !"file".equals(scheme) && !"package".equals(scheme)) { - Log.w(TAG, "Unsupported scheme " + scheme); - setPmResult(PackageManager.INSTALL_FAILED_INVALID_URI); - finish(); - return; - } - - final PackageUtil.AppSnippet as; - if ("package".equals(mPackageURI.getScheme())) { - try { - mPkgInfo = mPm.getPackageInfo(mPackageURI.getSchemeSpecificPart(), - PackageManager.GET_PERMISSIONS | PackageManager.GET_UNINSTALLED_PACKAGES); - } catch (NameNotFoundException e) { - } - if (mPkgInfo == null) { - Log.w(TAG, "Requested package " + mPackageURI.getScheme() - + " not available. Discontinuing installation"); - showDialogInner(DLG_PACKAGE_ERROR); - setPmResult(PackageManager.INSTALL_FAILED_INVALID_APK); - return; - } - as = new PackageUtil.AppSnippet(mPm.getApplicationLabel(mPkgInfo.applicationInfo), - mPm.getApplicationIcon(mPkgInfo.applicationInfo)); - } else { - final File sourceFile = new File(mPackageURI.getPath()); - PackageParser.Package parsed = PackageUtil.getPackageInfo(sourceFile); - - // Check for parse errors - if (parsed == null) { - Log.w(TAG, "Parse error when parsing manifest. Discontinuing installation"); - showDialogInner(DLG_PACKAGE_ERROR); - setPmResult(PackageManager.INSTALL_FAILED_INVALID_APK); - return; - } - mPkgInfo = PackageParser.generatePackageInfo(parsed, null, - PackageManager.GET_PERMISSIONS, 0, 0, null, - new PackageUserState()); - as = PackageUtil.getAppSnippet(this, mPkgInfo.applicationInfo, sourceFile); - } - //set view setContentView(R.layout.install_start); mInstallConfirm = findViewById(R.id.install_confirm_panel); mInstallConfirm.setVisibility(View.INVISIBLE); - PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet); - - mOriginatingUid = getOriginatingUid(intent); + mOk = (Button)findViewById(R.id.ok_button); + mCancel = (Button)findViewById(R.id.cancel_button); + mOk.setOnClickListener(this); + mCancel.setOnClickListener(this); // Block the install attempt on the Unknown Sources setting if necessary. final boolean requestFromUnknownSource = isInstallRequestFromUnknownSource(intent); @@ -517,17 +491,87 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen // If the admin prohibits it, or we're running in a managed profile, just show error // and exit. Otherwise show an option to take the user to Settings to change the setting. final boolean isManagedProfile = mUserManager.isManagedProfile(); - if (!unknownSourcesAllowedByAdmin) { + if (!isUnknownSourcesAllowedByAdmin()) { startActivity(new Intent(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS)); - finish(); - } else if (!unknownSourcesAllowedByUser && isManagedProfile) { + clearCachedApkIfNeededAndFinish(); + } else if (!isUnknownSourcesEnabled() && isManagedProfile) { showDialogInner(DLG_ADMIN_RESTRICTS_UNKNOWN_SOURCES); - } else if (!unknownSourcesAllowedByUser) { + } else if (!isUnknownSourcesEnabled()) { // Ask user to enable setting first showDialogInner(DLG_UNKNOWN_SOURCES); - } else { - initiateInstall(); } + + processPackageUri(packageUri); + } + + @Override + protected void onDestroy() { + if (mStagingAsynTask != null) { + mStagingAsynTask.cancel(true); + mStagingAsynTask = null; + } + super.onDestroy(); + } + + private void processPackageUri(final Uri packageUri) { + mPackageURI = packageUri; + + final String scheme = packageUri.getScheme(); + final PackageUtil.AppSnippet as; + + switch (scheme) { + case SCHEME_PACKAGE: { + try { + mPkgInfo = mPm.getPackageInfo(packageUri.getSchemeSpecificPart(), + PackageManager.GET_PERMISSIONS + | PackageManager.GET_UNINSTALLED_PACKAGES); + } catch (NameNotFoundException e) { + } + if (mPkgInfo == null) { + Log.w(TAG, "Requested package " + packageUri.getScheme() + + " not available. Discontinuing installation"); + showDialogInner(DLG_PACKAGE_ERROR); + setPmResult(PackageManager.INSTALL_FAILED_INVALID_APK); + return; + } + as = new PackageUtil.AppSnippet(mPm.getApplicationLabel(mPkgInfo.applicationInfo), + mPm.getApplicationIcon(mPkgInfo.applicationInfo)); + } break; + + case SCHEME_FILE: { + File sourceFile = new File(packageUri.getPath()); + PackageParser.Package parsed = PackageUtil.getPackageInfo(sourceFile); + + // Check for parse errors + if (parsed == null) { + Log.w(TAG, "Parse error when parsing manifest. Discontinuing installation"); + showDialogInner(DLG_PACKAGE_ERROR); + setPmResult(PackageManager.INSTALL_FAILED_INVALID_APK); + return; + } + mPkgInfo = PackageParser.generatePackageInfo(parsed, null, + PackageManager.GET_PERMISSIONS, 0, 0, null, + new PackageUserState()); + as = PackageUtil.getAppSnippet(this, mPkgInfo.applicationInfo, sourceFile); + } break; + + case SCHEME_CONTENT: { + mStagingAsynTask = new StagingAsyncTask(); + mStagingAsynTask.execute(packageUri); + return; + } + + default: { + Log.w(TAG, "Unsupported scheme " + scheme); + setPmResult(PackageManager.INSTALL_FAILED_INVALID_URI); + clearCachedApkIfNeededAndFinish(); + return; + } + } + + PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet); + + initiateInstall(); } /** Get the ApplicationInfo for the calling package, if available */ @@ -612,7 +656,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen // Generic handling when pressing back key public void onCancel(DialogInterface dialog) { - finish(); + clearCachedApkIfNeededAndFinish(); } public void onClick(View v) { @@ -620,7 +664,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen if (mOkCanInstall || mScrollView == null) { if (mSessionId != -1) { mInstaller.setPermissionsResult(mSessionId, true); - finish(); + clearCachedApkIfNeededAndFinish(); } else { startInstall(); } @@ -633,7 +677,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen if (mSessionId != -1) { mInstaller.setPermissionsResult(mSessionId, false); } - finish(); + clearCachedApkIfNeededAndFinish(); } } @@ -664,7 +708,99 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); } if(localLOGV) Log.i(TAG, "downloaded app uri="+mPackageURI); - startActivity(newIntent); + startActivityForResult(newIntent, REQUEST_INSTALL_PACKAGE); + } + + private void clearCachedApkIfNeededAndFinish() { + if (mContentUriApkStagingFile != null) { + mContentUriApkStagingFile.delete(); + mContentUriApkStagingFile = null; + } finish(); } + + private final class StagingAsyncTask extends AsyncTask<Uri, Void, File> { + private static final long SHOW_EMPTY_STATE_DELAY_MILLIS = 300; + + private final Runnable mEmptyStateRunnable = new Runnable() { + @Override + public void run() { + ((TextView) findViewById(R.id.app_name)).setText(R.string.app_name_unknown); + ((TextView) findViewById(R.id.install_confirm_question)) + .setText(R.string.message_staging); + mInstallConfirm.setVisibility(View.VISIBLE); + findViewById(android.R.id.tabhost).setVisibility(View.INVISIBLE); + findViewById(R.id.ok_button).setEnabled(false); + Drawable icon = getDrawable(R.drawable.ic_file_download); + Utils.applyTint(PackageInstallerActivity.this, + icon, android.R.attr.colorControlNormal); + ((ImageView) findViewById(R.id.app_icon)).setImageDrawable(icon); + } + }; + + @Override + protected void onPreExecute() { + getWindow().getDecorView().postDelayed(mEmptyStateRunnable, + SHOW_EMPTY_STATE_DELAY_MILLIS); + } + + @Override + protected File doInBackground(Uri... params) { + if (params == null || params.length <= 0) { + return null; + } + Uri packageUri = params[0]; + File sourceFile = null; + try { + sourceFile = File.createTempFile("package", ".apk", getCacheDir()); + try ( + InputStream in = getContentResolver().openInputStream(packageUri); + OutputStream out = (in != null) ? new FileOutputStream( + sourceFile) : null; + ) { + // Despite the comments in ContentResolver#openInputStream + // the returned stream can be null. + if (in == null) { + return null; + } + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = in.read(buffer)) >= 0) { + // Be nice and respond to a cancellation + if (isCancelled()) { + return null; + } + out.write(buffer, 0, bytesRead); + } + } + } catch (IOException ioe) { + Log.w(TAG, "Error staging apk from content URI", ioe); + if (sourceFile != null) { + sourceFile.delete(); + } + } + return sourceFile; + } + + @Override + protected void onPostExecute(File file) { + getWindow().getDecorView().removeCallbacks(mEmptyStateRunnable); + if (isFinishing() || isDestroyed()) { + return; + } + if (file == null) { + showDialogInner(DLG_PACKAGE_ERROR); + setPmResult(PackageManager.INSTALL_FAILED_INVALID_APK); + return; + } + mContentUriApkStagingFile = file; + Uri fileUri = Uri.fromFile(file); + processPackageUri(fileUri); + } + + @Override + protected void onCancelled(File file) { + getWindow().getDecorView().removeCallbacks(mEmptyStateRunnable); + } + }; } diff --git a/src/com/android/packageinstaller/permission/model/PermissionApps.java b/src/com/android/packageinstaller/permission/model/PermissionApps.java index 9ff5025c..2c0508a5 100644 --- a/src/com/android/packageinstaller/permission/model/PermissionApps.java +++ b/src/com/android/packageinstaller/permission/model/PermissionApps.java @@ -32,7 +32,7 @@ import android.util.Log; import android.util.SparseArray; import com.android.packageinstaller.R; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import java.util.ArrayList; import java.util.Collections; diff --git a/src/com/android/packageinstaller/permission/model/PermissionGroups.java b/src/com/android/packageinstaller/permission/model/PermissionGroups.java index 8ca69f24..04dd07ff 100644 --- a/src/com/android/packageinstaller/permission/model/PermissionGroups.java +++ b/src/com/android/packageinstaller/permission/model/PermissionGroups.java @@ -31,7 +31,7 @@ import android.os.Bundle; import android.util.ArraySet; import com.android.packageinstaller.R; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import java.util.ArrayList; import java.util.Collections; diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java index 810ae8ec..d7e4547a 100644 --- a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java +++ b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java @@ -26,7 +26,7 @@ import android.util.ArrayMap; import android.util.ArraySet; import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import java.text.Collator; import java.util.ArrayList; diff --git a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java index b872983d..38080e6b 100644 --- a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java @@ -46,7 +46,7 @@ import android.widget.TextView; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.AppPermissions; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import com.android.packageinstaller.permission.ui.ConfirmActionDialogFragment.OnActionConfirmedListener; import java.util.List; diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java index 0c249e55..540d8765 100644 --- a/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java @@ -37,7 +37,7 @@ import android.provider.Settings; import android.util.Log; import android.view.MenuItem; import com.android.packageinstaller.R; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import java.util.ArrayList; import java.util.Collections; diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java index d5e649ee..674b562e 100644 --- a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java @@ -49,10 +49,9 @@ import android.widget.Toast; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.AppPermissions; -import com.android.packageinstaller.permission.ui.OverlayTouchActivity; import com.android.packageinstaller.permission.utils.LocationUtils; import com.android.packageinstaller.permission.utils.SafetyNetLogger; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import com.android.settingslib.RestrictedLockUtils; import java.util.ArrayList; diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java index c53da879..f5d7020e 100644 --- a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java @@ -37,7 +37,7 @@ import com.android.packageinstaller.permission.model.PermissionApps; import com.android.packageinstaller.permission.model.PermissionApps.PmCache; import com.android.packageinstaller.permission.model.PermissionGroup; import com.android.packageinstaller.permission.model.PermissionGroups; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import java.util.List; diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java index 0f616361..563b11d7 100644 --- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java @@ -43,10 +43,9 @@ import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.PermissionApps; import com.android.packageinstaller.permission.model.PermissionApps.Callback; import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp; -import com.android.packageinstaller.permission.ui.OverlayTouchActivity; import com.android.packageinstaller.permission.utils.LocationUtils; import com.android.packageinstaller.permission.utils.SafetyNetLogger; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import com.android.settingslib.RestrictedLockUtils; import java.util.ArrayList; diff --git a/src/com/android/packageinstaller/permission/ui/handheld/SettingsWithHeader.java b/src/com/android/packageinstaller/permission/ui/handheld/SettingsWithHeader.java index c15a4287..d5775796 100644 --- a/src/com/android/packageinstaller/permission/ui/handheld/SettingsWithHeader.java +++ b/src/com/android/packageinstaller/permission/ui/handheld/SettingsWithHeader.java @@ -28,7 +28,6 @@ import android.widget.TextView; import com.android.packageinstaller.DeviceUtils; import com.android.packageinstaller.R; -import com.android.packageinstaller.permission.utils.Utils; public abstract class SettingsWithHeader extends PermissionsFrameFragment implements OnClickListener { diff --git a/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java index 7ea9a258..db99538c 100644 --- a/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java @@ -45,7 +45,7 @@ import android.view.MenuItem; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.AppPermissions; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import java.util.ArrayList; import java.util.Collections; diff --git a/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java index 5bb0d01c..4a38af96 100644 --- a/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java @@ -50,11 +50,10 @@ import android.widget.Toast; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.AppPermissions; -import com.android.packageinstaller.permission.ui.OverlayTouchActivity; import com.android.packageinstaller.permission.ui.ReviewPermissionsActivity; import com.android.packageinstaller.permission.utils.LocationUtils; import com.android.packageinstaller.permission.utils.SafetyNetLogger; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import java.util.ArrayList; import java.util.List; diff --git a/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java index 47301f48..81550337 100644 --- a/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java @@ -38,7 +38,7 @@ import com.android.packageinstaller.permission.model.PermissionApps; import com.android.packageinstaller.permission.model.PermissionApps.PmCache; import com.android.packageinstaller.permission.model.PermissionGroup; import com.android.packageinstaller.permission.model.PermissionGroups; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import java.util.List; diff --git a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java index 1f4228bb..a5ef5411 100644 --- a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java @@ -45,11 +45,10 @@ import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.PermissionApps; import com.android.packageinstaller.permission.model.PermissionApps.Callback; import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp; -import com.android.packageinstaller.permission.ui.OverlayTouchActivity; import com.android.packageinstaller.permission.ui.ReviewPermissionsActivity; import com.android.packageinstaller.permission.utils.LocationUtils; import com.android.packageinstaller.permission.utils.SafetyNetLogger; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import java.util.ArrayList; import java.util.List; diff --git a/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java b/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java index e81aee86..2c7b91e9 100644 --- a/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java +++ b/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java @@ -33,7 +33,6 @@ import android.widget.TextView; import com.android.packageinstaller.DeviceUtils; import com.android.packageinstaller.R; -import com.android.packageinstaller.permission.utils.Utils; public abstract class PermissionsFrameFragment extends PreferenceFragment { diff --git a/src/com/android/packageinstaller/permission/ui/television/SettingsWithHeader.java b/src/com/android/packageinstaller/permission/ui/television/SettingsWithHeader.java index 4dae629c..a401426d 100644 --- a/src/com/android/packageinstaller/permission/ui/television/SettingsWithHeader.java +++ b/src/com/android/packageinstaller/permission/ui/television/SettingsWithHeader.java @@ -28,7 +28,6 @@ import android.widget.TextView; import com.android.packageinstaller.DeviceUtils; import com.android.packageinstaller.R; -import com.android.packageinstaller.permission.utils.Utils; public abstract class SettingsWithHeader extends PermissionsFrameFragment implements OnClickListener { diff --git a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java index 6ea34628..13a16d6e 100644 --- a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java +++ b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java @@ -35,12 +35,11 @@ import android.widget.Toast; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.AppPermissions; -import com.android.packageinstaller.permission.ui.OverlayTouchActivity; import com.android.packageinstaller.permission.ui.wear.settings.PermissionsSettingsAdapter; import com.android.packageinstaller.permission.ui.wear.settings.SettingsAdapter; import com.android.packageinstaller.permission.utils.LocationUtils; import com.android.packageinstaller.permission.utils.SafetyNetLogger; -import com.android.packageinstaller.permission.utils.Utils; +import com.android.packageinstaller.util.Utils; import java.util.ArrayList; import java.util.List; diff --git a/src/com/android/packageinstaller/permission/utils/Utils.java b/src/com/android/packageinstaller/util/Utils.java index 21830378..f0d88d32 100644 --- a/src/com/android/packageinstaller/permission/utils/Utils.java +++ b/src/com/android/packageinstaller/util/Utils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.packageinstaller.permission.utils; +package com.android.packageinstaller.util; import android.Manifest; import android.content.Context; @@ -22,7 +22,6 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.Resources.Theme; import android.graphics.drawable.Drawable; @@ -33,6 +32,7 @@ import android.util.TypedValue; import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.AppPermissions; import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp; +import com.android.packageinstaller.permission.utils.LocationUtils; import java.util.List; |