Loading src/com/android/documentsui/FilesActivity.java +5 −3 Original line number Original line Diff line number Diff line Loading @@ -104,10 +104,12 @@ public class FilesActivity extends BaseActivity { // loading or restoring the stack. // loading or restoring the stack. // // // When restoring from a stack, if a URI is present, it should only ever // When restoring from a stack, if a URI is present, it should only ever // be a launch URI. Launch URIs support sensible activity management, but // be a launch URI, or a fake Uri from notifications. // don't specify a real content target. // Launch URIs support sensible activity management, but don't specify a real // content target. if (DEBUG) Log.d(TAG, "Launching with non-empty stack."); if (DEBUG) Log.d(TAG, "Launching with non-empty stack."); checkState(uri == null || LauncherActivity.isLaunchUri(uri)); checkState(uri == null || uri.getAuthority() == null || LauncherActivity.isLaunchUri(uri)); refreshCurrentRootAndDirectory(ANIM_NONE); refreshCurrentRootAndDirectory(ANIM_NONE); } else if (DocumentsContract.isRootUri(this, uri)) { } else if (DocumentsContract.isRootUri(this, uri)) { if (DEBUG) Log.d(TAG, "Launching with root URI."); if (DEBUG) Log.d(TAG, "Launching with root URI."); Loading src/com/android/documentsui/Metrics.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -354,7 +354,7 @@ public final class Metrics { * a single ROOT_OTHER bucket. * a single ROOT_OTHER bucket. */ */ private static @Root int sanitizeRoot(Uri uri) { private static @Root int sanitizeRoot(Uri uri) { if (uri == null || LauncherActivity.isLaunchUri(uri)) { if (uri == null || uri.getAuthority() == null || LauncherActivity.isLaunchUri(uri)) { return ROOT_NONE; return ROOT_NONE; } } Loading src/com/android/documentsui/services/CopyJob.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -186,7 +186,7 @@ class CopyJob extends Job { @Override @Override Notification getWarningNotification() { Notification getWarningNotification() { final Intent navigateIntent = buildNavigateIntent(); final Intent navigateIntent = buildNavigateIntent(INTENT_TAG_WARNING); navigateIntent.putExtra(EXTRA_DIALOG_TYPE, DIALOG_TYPE_CONVERTED); navigateIntent.putExtra(EXTRA_DIALOG_TYPE, DIALOG_TYPE_CONVERTED); navigateIntent.putExtra(EXTRA_OPERATION, operationType); navigateIntent.putExtra(EXTRA_OPERATION, operationType); Loading src/com/android/documentsui/services/Job.java +18 −4 Original line number Original line Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.ContentResolver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.net.Uri; import android.os.Parcelable; import android.os.Parcelable; import android.os.RemoteException; import android.os.RemoteException; import android.provider.DocumentsContract; import android.provider.DocumentsContract; Loading @@ -60,6 +61,12 @@ import java.util.Map; */ */ abstract public class Job implements Runnable { abstract public class Job implements Runnable { private static final String TAG = "Job"; private static final String TAG = "Job"; static final String INTENT_TAG_WARNING = "warning"; static final String INTENT_TAG_FAILURE = "failure"; static final String INTENT_TAG_PROGRESS = "progress"; static final String INTENT_TAG_CANCEL = "cancel"; final Context service; final Context service; final Context appContext; final Context appContext; final Listener listener; final Listener listener; Loading Loading @@ -130,6 +137,10 @@ abstract public class Job implements Runnable { abstract Notification getWarningNotification(); abstract Notification getWarningNotification(); Uri getDataUriForIntent(String tag) { return Uri.parse(String.format("data,%s-%s", tag, id)); } ContentProviderClient getClient(DocumentInfo doc) throws RemoteException { ContentProviderClient getClient(DocumentInfo doc) throws RemoteException { ContentProviderClient client = mClients.get(doc.authority); ContentProviderClient client = mClients.get(doc.authority); if (client == null) { if (client == null) { Loading Loading @@ -193,10 +204,9 @@ abstract public class Job implements Runnable { } } Notification getFailureNotification(@PluralsRes int titleId, @DrawableRes int icon) { Notification getFailureNotification(@PluralsRes int titleId, @DrawableRes int icon) { final Intent navigateIntent = buildNavigateIntent(); final Intent navigateIntent = buildNavigateIntent(INTENT_TAG_FAILURE); navigateIntent.putExtra(EXTRA_DIALOG_TYPE, OperationDialogFragment.DIALOG_TYPE_FAILURE); navigateIntent.putExtra(EXTRA_DIALOG_TYPE, OperationDialogFragment.DIALOG_TYPE_FAILURE); navigateIntent.putExtra(EXTRA_OPERATION, operationType); navigateIntent.putExtra(EXTRA_OPERATION, operationType); navigateIntent.putParcelableArrayListExtra(EXTRA_SRC_LIST, failedFiles); navigateIntent.putParcelableArrayListExtra(EXTRA_SRC_LIST, failedFiles); final Notification.Builder errorBuilder = new Notification.Builder(service) final Notification.Builder errorBuilder = new Notification.Builder(service) Loading @@ -219,7 +229,8 @@ abstract public class Job implements Runnable { Notification.Builder progressBuilder = new Notification.Builder(service) Notification.Builder progressBuilder = new Notification.Builder(service) .setContentTitle(title) .setContentTitle(title) .setContentIntent( .setContentIntent( PendingIntent.getActivity(appContext, 0, buildNavigateIntent(), 0)) PendingIntent.getActivity(appContext, 0, buildNavigateIntent(INTENT_TAG_PROGRESS), 0)) .setCategory(Notification.CATEGORY_PROGRESS) .setCategory(Notification.CATEGORY_PROGRESS) .setSmallIcon(icon) .setSmallIcon(icon) .setOngoing(true); .setOngoing(true); Loading @@ -241,15 +252,18 @@ abstract public class Job implements Runnable { /** /** * Creates an intent for navigating back to the destination directory. * Creates an intent for navigating back to the destination directory. */ */ Intent buildNavigateIntent() { Intent buildNavigateIntent(String tag) { Intent intent = new Intent(service, FilesActivity.class); Intent intent = new Intent(service, FilesActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(DocumentsContract.ACTION_BROWSE); intent.setAction(DocumentsContract.ACTION_BROWSE); intent.setData(getDataUriForIntent(tag)); intent.putExtra(Shared.EXTRA_STACK, (Parcelable) stack); intent.putExtra(Shared.EXTRA_STACK, (Parcelable) stack); return intent; return intent; } } Intent createCancelIntent() { Intent createCancelIntent() { final Intent cancelIntent = new Intent(service, FileOperationService.class); final Intent cancelIntent = new Intent(service, FileOperationService.class); cancelIntent.setData(getDataUriForIntent(INTENT_TAG_CANCEL)); cancelIntent.putExtra(EXTRA_CANCEL, true); cancelIntent.putExtra(EXTRA_CANCEL, true); cancelIntent.putExtra(EXTRA_JOB_ID, id); cancelIntent.putExtra(EXTRA_JOB_ID, id); return cancelIntent; return cancelIntent; Loading Loading
src/com/android/documentsui/FilesActivity.java +5 −3 Original line number Original line Diff line number Diff line Loading @@ -104,10 +104,12 @@ public class FilesActivity extends BaseActivity { // loading or restoring the stack. // loading or restoring the stack. // // // When restoring from a stack, if a URI is present, it should only ever // When restoring from a stack, if a URI is present, it should only ever // be a launch URI. Launch URIs support sensible activity management, but // be a launch URI, or a fake Uri from notifications. // don't specify a real content target. // Launch URIs support sensible activity management, but don't specify a real // content target. if (DEBUG) Log.d(TAG, "Launching with non-empty stack."); if (DEBUG) Log.d(TAG, "Launching with non-empty stack."); checkState(uri == null || LauncherActivity.isLaunchUri(uri)); checkState(uri == null || uri.getAuthority() == null || LauncherActivity.isLaunchUri(uri)); refreshCurrentRootAndDirectory(ANIM_NONE); refreshCurrentRootAndDirectory(ANIM_NONE); } else if (DocumentsContract.isRootUri(this, uri)) { } else if (DocumentsContract.isRootUri(this, uri)) { if (DEBUG) Log.d(TAG, "Launching with root URI."); if (DEBUG) Log.d(TAG, "Launching with root URI."); Loading
src/com/android/documentsui/Metrics.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -354,7 +354,7 @@ public final class Metrics { * a single ROOT_OTHER bucket. * a single ROOT_OTHER bucket. */ */ private static @Root int sanitizeRoot(Uri uri) { private static @Root int sanitizeRoot(Uri uri) { if (uri == null || LauncherActivity.isLaunchUri(uri)) { if (uri == null || uri.getAuthority() == null || LauncherActivity.isLaunchUri(uri)) { return ROOT_NONE; return ROOT_NONE; } } Loading
src/com/android/documentsui/services/CopyJob.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -186,7 +186,7 @@ class CopyJob extends Job { @Override @Override Notification getWarningNotification() { Notification getWarningNotification() { final Intent navigateIntent = buildNavigateIntent(); final Intent navigateIntent = buildNavigateIntent(INTENT_TAG_WARNING); navigateIntent.putExtra(EXTRA_DIALOG_TYPE, DIALOG_TYPE_CONVERTED); navigateIntent.putExtra(EXTRA_DIALOG_TYPE, DIALOG_TYPE_CONVERTED); navigateIntent.putExtra(EXTRA_OPERATION, operationType); navigateIntent.putExtra(EXTRA_OPERATION, operationType); Loading
src/com/android/documentsui/services/Job.java +18 −4 Original line number Original line Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.ContentResolver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.net.Uri; import android.os.Parcelable; import android.os.Parcelable; import android.os.RemoteException; import android.os.RemoteException; import android.provider.DocumentsContract; import android.provider.DocumentsContract; Loading @@ -60,6 +61,12 @@ import java.util.Map; */ */ abstract public class Job implements Runnable { abstract public class Job implements Runnable { private static final String TAG = "Job"; private static final String TAG = "Job"; static final String INTENT_TAG_WARNING = "warning"; static final String INTENT_TAG_FAILURE = "failure"; static final String INTENT_TAG_PROGRESS = "progress"; static final String INTENT_TAG_CANCEL = "cancel"; final Context service; final Context service; final Context appContext; final Context appContext; final Listener listener; final Listener listener; Loading Loading @@ -130,6 +137,10 @@ abstract public class Job implements Runnable { abstract Notification getWarningNotification(); abstract Notification getWarningNotification(); Uri getDataUriForIntent(String tag) { return Uri.parse(String.format("data,%s-%s", tag, id)); } ContentProviderClient getClient(DocumentInfo doc) throws RemoteException { ContentProviderClient getClient(DocumentInfo doc) throws RemoteException { ContentProviderClient client = mClients.get(doc.authority); ContentProviderClient client = mClients.get(doc.authority); if (client == null) { if (client == null) { Loading Loading @@ -193,10 +204,9 @@ abstract public class Job implements Runnable { } } Notification getFailureNotification(@PluralsRes int titleId, @DrawableRes int icon) { Notification getFailureNotification(@PluralsRes int titleId, @DrawableRes int icon) { final Intent navigateIntent = buildNavigateIntent(); final Intent navigateIntent = buildNavigateIntent(INTENT_TAG_FAILURE); navigateIntent.putExtra(EXTRA_DIALOG_TYPE, OperationDialogFragment.DIALOG_TYPE_FAILURE); navigateIntent.putExtra(EXTRA_DIALOG_TYPE, OperationDialogFragment.DIALOG_TYPE_FAILURE); navigateIntent.putExtra(EXTRA_OPERATION, operationType); navigateIntent.putExtra(EXTRA_OPERATION, operationType); navigateIntent.putParcelableArrayListExtra(EXTRA_SRC_LIST, failedFiles); navigateIntent.putParcelableArrayListExtra(EXTRA_SRC_LIST, failedFiles); final Notification.Builder errorBuilder = new Notification.Builder(service) final Notification.Builder errorBuilder = new Notification.Builder(service) Loading @@ -219,7 +229,8 @@ abstract public class Job implements Runnable { Notification.Builder progressBuilder = new Notification.Builder(service) Notification.Builder progressBuilder = new Notification.Builder(service) .setContentTitle(title) .setContentTitle(title) .setContentIntent( .setContentIntent( PendingIntent.getActivity(appContext, 0, buildNavigateIntent(), 0)) PendingIntent.getActivity(appContext, 0, buildNavigateIntent(INTENT_TAG_PROGRESS), 0)) .setCategory(Notification.CATEGORY_PROGRESS) .setCategory(Notification.CATEGORY_PROGRESS) .setSmallIcon(icon) .setSmallIcon(icon) .setOngoing(true); .setOngoing(true); Loading @@ -241,15 +252,18 @@ abstract public class Job implements Runnable { /** /** * Creates an intent for navigating back to the destination directory. * Creates an intent for navigating back to the destination directory. */ */ Intent buildNavigateIntent() { Intent buildNavigateIntent(String tag) { Intent intent = new Intent(service, FilesActivity.class); Intent intent = new Intent(service, FilesActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(DocumentsContract.ACTION_BROWSE); intent.setAction(DocumentsContract.ACTION_BROWSE); intent.setData(getDataUriForIntent(tag)); intent.putExtra(Shared.EXTRA_STACK, (Parcelable) stack); intent.putExtra(Shared.EXTRA_STACK, (Parcelable) stack); return intent; return intent; } } Intent createCancelIntent() { Intent createCancelIntent() { final Intent cancelIntent = new Intent(service, FileOperationService.class); final Intent cancelIntent = new Intent(service, FileOperationService.class); cancelIntent.setData(getDataUriForIntent(INTENT_TAG_CANCEL)); cancelIntent.putExtra(EXTRA_CANCEL, true); cancelIntent.putExtra(EXTRA_CANCEL, true); cancelIntent.putExtra(EXTRA_JOB_ID, id); cancelIntent.putExtra(EXTRA_JOB_ID, id); return cancelIntent; return cancelIntent; Loading