summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/documentsui/AbstractActionHandler.java7
-rw-r--r--src/com/android/documentsui/ActionHandler.java2
-rw-r--r--src/com/android/documentsui/BaseActivity.java4
-rw-r--r--src/com/android/documentsui/ForResultForwarderActivity.java69
-rw-r--r--src/com/android/documentsui/RequestQuietModeDisabledTask.java49
-rw-r--r--src/com/android/documentsui/dirlist/InflateMessageDocumentHolder.java14
-rw-r--r--src/com/android/documentsui/dirlist/Message.java11
-rw-r--r--src/com/android/documentsui/picker/ActionHandler.java58
8 files changed, 82 insertions, 132 deletions
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java
index c450c70de..0c612eddd 100644
--- a/src/com/android/documentsui/AbstractActionHandler.java
+++ b/src/com/android/documentsui/AbstractActionHandler.java
@@ -87,9 +87,7 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA
implements ActionHandler {
@VisibleForTesting
- public static final int CODE_FORWARD = 42;
public static final int CODE_AUTHENTICATION = 43;
- public static final int CODE_FORWARD_CROSS_PROFILE = 44;
@VisibleForTesting
static final int LOADER_ID = 42;
@@ -177,6 +175,11 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA
}
@Override
+ public void requestQuietModeDisabled(RootInfo info, UserId userId) {
+ new RequestQuietModeDisabledTask(mActivity, userId).execute();
+ }
+
+ @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case CODE_AUTHENTICATION:
diff --git a/src/com/android/documentsui/ActionHandler.java b/src/com/android/documentsui/ActionHandler.java
index 71cccf9ee..15124eb33 100644
--- a/src/com/android/documentsui/ActionHandler.java
+++ b/src/com/android/documentsui/ActionHandler.java
@@ -89,6 +89,8 @@ public interface ActionHandler {
*/
void startAuthentication(PendingIntent intent);
+ void requestQuietModeDisabled(RootInfo info, UserId userId);
+
void showAppDetails(ResolveInfo info, UserId userId);
void openRoot(RootInfo root);
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index d0ffe593c..0ddf001be 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -619,10 +619,10 @@ public abstract class BaseActivity
// Causes talkback to announce the activity's new title
String appName = getString(R.string.files_label);
- if (getTitle().toString().isEmpty()) {
+ if (getTitle() == null || getTitle().toString().isEmpty()) {
// First launch, TalkBack announces app name.
setTitle(String.format("%s. %s", appName, mState.stack.getTitle()));
- } else {
+ } else if (mState.stack.getTitle() != null) {
setTitle(mState.stack.getTitle());
}
diff --git a/src/com/android/documentsui/ForResultForwarderActivity.java b/src/com/android/documentsui/ForResultForwarderActivity.java
deleted file mode 100644
index 61cee71dc..000000000
--- a/src/com/android/documentsui/ForResultForwarderActivity.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2020 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.documentsui;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-
-import com.android.documentsui.base.UserId;
-
-/**
- * Forwards a cross-profile startActivityForResult intent.
- */
-public class ForResultForwarderActivity extends Activity {
-
- private static final String TAG = "ForResultForwarderActiv";
- private static final String EXTRA_INTENT = "EXTRA_INTENT";
- private static final String EXTRA_USER = "EXTRA_USER";
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- final Intent intent = getIntent();
-
- if (!intent.hasExtra(EXTRA_INTENT) || !intent.hasExtra(EXTRA_USER)) {
- Log.e(TAG, "Missing intent or user");
- setResult(Activity.RESULT_CANCELED);
- finish();
- return;
- }
-
- Intent targetIntent = intent.getParcelableExtra(EXTRA_INTENT);
- // We should never have the default value because of the above check
- UserId targetUserId = UserId.of(intent.getIntExtra(EXTRA_USER, /* defaultValue= */ -1));
-
- targetIntent.addFlags(
- Intent.FLAG_ACTIVITY_FORWARD_RESULT | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
- try {
- targetUserId.startActivityAsUser(this, targetIntent);
- } catch (RuntimeException e) {
- Log.e(TAG, "Failed to forward activity");
- setResult(Activity.RESULT_CANCELED);
- }
- finish();
- }
-
- public static Intent getIntent(Context context, Intent intent, UserId targetUserId) {
- Intent forwarder = new Intent(context, ForResultForwarderActivity.class);
- forwarder.putExtra(EXTRA_INTENT, intent);
- forwarder.putExtra(EXTRA_USER, targetUserId.getIdentifier());
- return forwarder;
- }
-}
diff --git a/src/com/android/documentsui/RequestQuietModeDisabledTask.java b/src/com/android/documentsui/RequestQuietModeDisabledTask.java
new file mode 100644
index 000000000..238e4f96c
--- /dev/null
+++ b/src/com/android/documentsui/RequestQuietModeDisabledTask.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2020 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.documentsui;
+
+import static androidx.core.util.Preconditions.checkNotNull;
+
+import android.content.Context;
+import android.os.AsyncTask;
+
+import com.android.documentsui.base.UserId;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * A task to request disabling quiet mode for a given user.
+ */
+class RequestQuietModeDisabledTask extends AsyncTask<Void, Void, Void> {
+
+ private final WeakReference<Context> mContextWeakReference;
+ private final UserId mUserId;
+
+ RequestQuietModeDisabledTask(Context context, UserId userId) {
+ mContextWeakReference = new WeakReference<>(checkNotNull(context));
+ mUserId = checkNotNull(userId);
+ }
+
+ @Override
+ protected Void doInBackground(Void... voids) {
+ Context context = mContextWeakReference.get();
+ if (context != null) {
+ mUserId.requestQuietModeDisabled(context);
+ }
+ return null;
+ }
+}
diff --git a/src/com/android/documentsui/dirlist/InflateMessageDocumentHolder.java b/src/com/android/documentsui/dirlist/InflateMessageDocumentHolder.java
index 9148345e6..4b1113675 100644
--- a/src/com/android/documentsui/dirlist/InflateMessageDocumentHolder.java
+++ b/src/com/android/documentsui/dirlist/InflateMessageDocumentHolder.java
@@ -22,6 +22,7 @@ import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
+import android.widget.ProgressBar;
import android.widget.TextView;
import com.android.documentsui.R;
@@ -47,11 +48,15 @@ final class InflateMessageDocumentHolder extends MessageHolder {
private View mContentView;
private View mCrossProfileView;
+ private View mCrossProfileContent;
+ private ProgressBar mCrossProfileProgress;
public InflateMessageDocumentHolder(Context context, ViewGroup parent) {
super(context, parent, R.layout.item_doc_inflated_message);
mContentView = itemView.findViewById(R.id.content);
mCrossProfileView = itemView.findViewById(R.id.cross_profile);
+ mCrossProfileContent = mCrossProfileView.findViewById(R.id.cross_profile_content);
+ mCrossProfileProgress = mCrossProfileView.findViewById(R.id.cross_profile_progress);
mContentMessage = mContentView.findViewById(R.id.message);
mContentImage = mContentView.findViewById(R.id.artwork);
@@ -76,7 +81,9 @@ final class InflateMessageDocumentHolder extends MessageHolder {
}
}
- private void onButtonClick(View button) {
+ private void onCrossProfileButtonClick(View button) {
+ mCrossProfileContent.setVisibility(View.GONE);
+ mCrossProfileProgress.setVisibility(View.VISIBLE);
mMessage.runCallback();
}
@@ -91,6 +98,9 @@ final class InflateMessageDocumentHolder extends MessageHolder {
private void bindCrossProfileMessageView() {
mContentView.setVisibility(View.GONE);
mCrossProfileView.setVisibility(View.VISIBLE);
+ mCrossProfileContent.setVisibility(View.VISIBLE);
+ mCrossProfileProgress.setVisibility(View.GONE);
+
mCrossProfileTitle.setText(mMessage.getTitleString());
if (!TextUtils.isEmpty(mMessage.getMessageString())) {
mCrossProfileMessage.setVisibility(View.VISIBLE);
@@ -102,7 +112,7 @@ final class InflateMessageDocumentHolder extends MessageHolder {
if (!TextUtils.isEmpty(mMessage.getButtonString())) {
mCrossProfileButton.setVisibility(View.VISIBLE);
mCrossProfileButton.setText(mMessage.getButtonString());
- mCrossProfileButton.setOnClickListener(this::onButtonClick);
+ mCrossProfileButton.setOnClickListener(this::onCrossProfileButtonClick);
} else {
mCrossProfileButton.setVisibility(View.GONE);
}
diff --git a/src/com/android/documentsui/dirlist/Message.java b/src/com/android/documentsui/dirlist/Message.java
index 4fc7c497f..b5074e4a1 100644
--- a/src/com/android/documentsui/dirlist/Message.java
+++ b/src/com/android/documentsui/dirlist/Message.java
@@ -21,7 +21,6 @@ import android.app.AuthenticationRequiredException;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
-import android.os.AsyncTask;
import androidx.annotation.Nullable;
@@ -215,14 +214,8 @@ abstract class Message {
CharSequence buttonText = null;
if (mCanModifyQuietMode) {
buttonText = mEnv.getContext().getResources().getText(R.string.quiet_mode_button);
- mCallback = () ->
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... voids) {
- userId.requestQuietModeDisabled(mEnv.getContext());
- return null;
- }
- }.execute();
+ mCallback = () -> mEnv.getActionHandler().requestQuietModeDisabled(
+ mEnv.getDisplayState().stack.getRoot(), userId);
}
update(
mEnv.getContext().getResources().getText(R.string.quiet_mode_error_title),
diff --git a/src/com/android/documentsui/picker/ActionHandler.java b/src/com/android/documentsui/picker/ActionHandler.java
index c58927dc7..18a1487ca 100644
--- a/src/com/android/documentsui/picker/ActionHandler.java
+++ b/src/com/android/documentsui/picker/ActionHandler.java
@@ -43,7 +43,6 @@ import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails;
import com.android.documentsui.AbstractActionHandler;
import com.android.documentsui.ActivityConfig;
import com.android.documentsui.DocumentsAccess;
-import com.android.documentsui.ForResultForwarderActivity;
import com.android.documentsui.Injector;
import com.android.documentsui.MetricConsts;
import com.android.documentsui.Metrics;
@@ -243,46 +242,6 @@ class ActionHandler<T extends FragmentActivity & Addons> extends AbstractActionH
}
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (DEBUG) {
- Log.d(TAG, "onActivityResult() code=" + resultCode);
- }
-
- // Only relay back results when not canceled; otherwise stick around to
- // let the user pick another app/backend.
- switch (requestCode) {
- case CODE_FORWARD:
- case CODE_FORWARD_CROSS_PROFILE:
- onExternalAppResult(requestCode, resultCode, data);
- break;
- default:
- super.onActivityResult(requestCode, resultCode, data);
- }
- }
-
- private void onExternalAppResult(int requestCode, int resultCode, Intent data) {
- if (resultCode != FragmentActivity.RESULT_CANCELED) {
- if (requestCode == CODE_FORWARD_CROSS_PROFILE) {
- UserId otherUser = UserId.CURRENT_USER.equals(mUserIdManager.getSystemUser())
- ? mUserIdManager.getManagedUser()
- : mUserIdManager.getSystemUser();
- if (!mState.canInteractWith(otherUser)) {
- mDialogs.showActionNotAllowed();
- return;
- }
- }
- // Remember that we last picked via external app
- mLastAccessed.setLastAccessedToExternalApp(mActivity);
-
- updatePickResult(data, false, MetricConsts.ROOT_THIRD_PARTY_APP);
-
- // Pass back result to original caller
- mActivity.setResult(resultCode, data, 0);
- mActivity.finish();
- }
- }
-
- @Override
public void openInNewWindow(DocumentStack path) {
// Open new window support only depends on vanilla Activity, so it is
// implemented in our parent class. But we don't support that in
@@ -311,27 +270,30 @@ class ActionHandler<T extends FragmentActivity & Addons> extends AbstractActionH
}
Intent intent = new Intent(mActivity.getIntent());
- final int flagsRemoved = Intent.FLAG_ACTIVITY_FORWARD_RESULT
- | Intent.FLAG_GRANT_READ_URI_PERMISSION
+ final int flagsRemoved = Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
| Intent.FLAG_GRANT_PREFIX_URI_PERMISSION;
intent.setFlags(intent.getFlags() & ~flagsRemoved);
+ intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
intent.setComponent(new ComponentName(
info.activityInfo.applicationInfo.packageName, info.activityInfo.name));
- if (!UserId.CURRENT_USER.equals(userId)) {
- intent = ForResultForwarderActivity.getIntent(mActivity, intent, userId);
- }
try {
boolean isCurrentUser = UserId.CURRENT_USER.equals(userId);
- mActivity.startActivityForResult(intent,
- isCurrentUser ? CODE_FORWARD : CODE_FORWARD_CROSS_PROFILE);
+ if (isCurrentUser) {
+ mActivity.startActivity(intent);
+ } else {
+ userId.startActivityAsUser(mActivity, intent);
+ }
+ mActivity.finish();
} catch (SecurityException | ActivityNotFoundException e) {
Log.e(TAG, "Caught error: " + e.getLocalizedMessage());
mInjector.dialogs.showNoApplicationFound();
}
}
+
@Override
public void springOpenDirectory(DocumentInfo doc) {
}