Skip to content

Migrate to new activity result API #1204

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,13 @@

package org.quantumbadger.redreader.activities;

import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.WindowManager;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import org.quantumbadger.redreader.R;
Expand All @@ -50,19 +48,12 @@ public abstract class BaseActivity extends AppCompatActivity
private final HashMap<Integer, PermissionCallback> mPermissionRequestCallbacks
= new HashMap<>();

private final HashMap<Integer, ActivityResultCallback> mActivityResultCallbacks
= new HashMap<>();

public interface PermissionCallback {
void onPermissionGranted();

void onPermissionDenied();
}

public interface ActivityResultCallback {
void onActivityResult(int resultCode, @Nullable Intent data);
}

public void closeAllExceptMain() {
closingAll = true;
closeIfNecessary();
Expand Down Expand Up @@ -170,33 +161,6 @@ public final void onRequestPermissionsResult(
}
}

public final void startActivityForResultWithCallback(
@NonNull final Intent intent,
@NonNull final ActivityResultCallback callback) {

final int requestCode = mRequestIdGenerator.incrementAndGet();
mActivityResultCallbacks.put(requestCode, callback);
startActivityForResult(intent, requestCode);
}

@Override
protected final void onActivityResult(
final int requestCode,
final int resultCode,
@Nullable final Intent data) {

super.onActivityResult(requestCode, resultCode, data);

final ActivityResultCallback callback
= mActivityResultCallbacks.remove(requestCode);

if (callback == null) {
return;
}

callback.onActivityResult(resultCode, data);
}

private void setOrientationFromPrefs() {
final PrefsUtility.ScreenOrientation orientation
= PrefsUtility.pref_behaviour_screen_orientation();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,11 @@
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.NonNull;
import androidx.core.content.IntentCompat;
import androidx.core.os.BundleCompat;
import androidx.annotation.Nullable;

import org.quantumbadger.redreader.R;
import org.quantumbadger.redreader.account.RedditAccount;
Expand Down Expand Up @@ -73,6 +75,8 @@ private enum ParentType {

private ParentType mParentType;

private ActivityResultLauncher<Void> mImgurUploadActivityLauncher;

private boolean mDraftReset = false;
private static String lastText;
private static RedditIdAndType lastParentIdAndType;
Expand Down Expand Up @@ -114,6 +118,9 @@ protected void onCreate(final Bundle savedInstanceState) {

final Button uploadPicture = layout.findViewById(R.id.comment_reply_picture);

mImgurUploadActivityLauncher = registerForActivityResult(
new ImgurUploadActivity.ResultContract(),
this::onUploadedPicture);
uploadPicture.setOnClickListener(v -> uploadPicture());

if(mParentType == ParentType.COMMENT_OR_POST) {
Expand Down Expand Up @@ -375,21 +382,18 @@ public void onBackPressed() {
}

private void uploadPicture() {
final Intent intent = new Intent(this, ImgurUploadActivity.class);
startActivityForResultWithCallback(intent, (resultCode, data) -> {
if (resultCode == 0 && data != null) {
final Uri uploadedImageUrl = data.getData();
if (uploadedImageUrl != null) {
// set the picture into textedit as a link: [Picture](PictureURL)
final String existingText = textEdit.getText().toString();
final String picturePretext = getString(R.string.comment_picture_pretext);
final String linkText =
"["+ picturePretext +"](" + uploadedImageUrl + ")";
final String combinedText = existingText + " " + linkText;
textEdit.setText(combinedText);
}
}
});
mImgurUploadActivityLauncher.launch(null);
}

private void onUploadedPicture(@Nullable final Uri uploadedImageUrl) {
if (uploadedImageUrl != null) {
// set the picture into textedit as a link: [Picture](PictureURL)
final String existingText = textEdit.getText().toString();
final String picturePretext = getString(R.string.comment_picture_pretext);
final String linkText =
"["+ picturePretext +"](" + uploadedImageUrl + ")";
final String combinedText = existingText + " " + linkText;
textEdit.setText(combinedText);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package org.quantumbadger.redreader.activities;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
Expand All @@ -32,7 +33,11 @@
import android.widget.ScrollView;
import android.widget.TextView;

import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContract;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.quantumbadger.redreader.R;
import org.quantumbadger.redreader.account.RedditAccountManager;
Expand Down Expand Up @@ -74,6 +79,8 @@ public class ImgurUploadActivity extends ViewsBaseActivity {

private View mLoadingOverlay;

private ActivityResultLauncher<String> mSelectImageActivityLauncher;

@Override
protected void onCreate(final Bundle savedInstanceState) {

Expand Down Expand Up @@ -108,21 +115,15 @@ protected void onCreate(final Bundle savedInstanceState) {
layout.addView(mThumbnailView);
General.setAllMarginsDp(this, mThumbnailView, 20);

mSelectImageActivityLauncher = registerForActivityResult(
new ActivityResultContracts.GetContent(),
uri -> {
if (uri != null) {
onImageSelected(uri);
}
});
browseButton.setOnClickListener(v -> {
final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResultWithCallback(intent, (resultCode, data) -> {

if(data == null || data.getData() == null) {
return;
}

if(resultCode != RESULT_OK) {
return;
}

onImageSelected(data.getData());
});
mSelectImageActivityLauncher.launch("image/*");
});

mUploadButton.setOnClickListener(v -> {
Expand Down Expand Up @@ -336,7 +337,7 @@ public void onJsonParsed(

final Intent resultIntent = new Intent();
resultIntent.setData(imageUri);
setResult(0, resultIntent);
setResult(RESULT_OK, resultIntent);
finish();
});
}
Expand All @@ -359,4 +360,20 @@ public void onBackPressed() {
super.onBackPressed();
}
}

public static class ResultContract extends ActivityResultContract<Void, Uri> {
@NonNull
@Override
public Intent createIntent(@NonNull final Context context, final Void unused) {
return new Intent(context, ImgurUploadActivity.class);
}

@Override
public Uri parseResult(final int resultCode, @Nullable final Intent intent) {
if (resultCode == RESULT_OK && intent != null) {
return intent.getData();
}
return null;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -566,7 +566,7 @@ public void onSelected(final PostListingURL url) {
} else {
final Intent intent = new Intent(this, PostListingActivity.class);
intent.setData(url.generateJsonUri());
startActivityForResult(intent, 1);
startActivity(intent);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.quantumbadger.redreader.activities;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
Expand All @@ -30,6 +31,10 @@
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.activity.result.contract.ActivityResultContract;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.quantumbadger.redreader.R;
import org.quantumbadger.redreader.RedReader;
import org.quantumbadger.redreader.common.PrefsUtility;
Expand Down Expand Up @@ -116,8 +121,8 @@ public boolean shouldOverrideUrlLoading(
(Objects.equals(url.getScheme(), REDREADER_SCHEME) ||
Objects.equals(url.getScheme(), HTTP_SCHEME))) {
final Intent intent = new Intent();
intent.putExtra("url", url.toString());
setResult(123, intent);
intent.setData(url);
setResult(RESULT_OK, intent);
finish();

} else {
Expand Down Expand Up @@ -154,4 +159,20 @@ protected void onResume() {
mWebView.onResume();
}
}

public static class ResultContract extends ActivityResultContract<Void, Uri> {
@NonNull
@Override
public Intent createIntent(@NonNull final Context context, final Void unused) {
return new Intent(context, OAuthLoginActivity.class);
}

@Override
public Uri parseResult(final int resultCode, @Nullable final Intent intent) {
if (resultCode == RESULT_OK && intent != null) {
return intent.getData();
}
return null;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -629,9 +629,7 @@ private static void add(
final Intent intent = new Intent(
activity,
SettingsActivity.class);
activity.startActivityForResult(
intent,
1);
activity.startActivity(intent);
return true;
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ public void onSidebar() {
intent.putExtra("title", String.format(Locale.US, "%s: %s",
getString(R.string.sidebar_activity_title),
fragment.getSubreddit().url));
startActivityForResult(intent, 1);
startActivity(intent);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,28 @@
package org.quantumbadger.redreader.adapters

import android.content.DialogInterface
import android.content.Intent
import android.graphics.Color
import android.graphics.Paint
import android.graphics.drawable.Drawable
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.activity.result.ActivityResultLauncher
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.content.res.AppCompatResources
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.textview.MaterialTextView
import org.quantumbadger.redreader.R
import org.quantumbadger.redreader.account.RedditAccountManager
import org.quantumbadger.redreader.activities.OAuthLoginActivity
import org.quantumbadger.redreader.common.BetterSSB
import org.quantumbadger.redreader.common.LinkHandler
import org.quantumbadger.redreader.common.UriString
import org.quantumbadger.redreader.reddit.api.RedditOAuth.needsRelogin
import org.quantumbadger.redreader.viewholders.VH1Text


class AccountListAdapter(private val context: AppCompatActivity, private val fragment: Fragment) :
class AccountListAdapter(private val context: AppCompatActivity, private val loginActivityLauncher: ActivityResultLauncher<Void>) :
HeaderRecyclerAdapter<RecyclerView.ViewHolder?>() {
private val accounts = RedditAccountManager.getInstance(context).accounts
private val rrIconAdd: Drawable?
Expand Down Expand Up @@ -82,7 +80,7 @@ class AccountListAdapter(private val context: AppCompatActivity, private val fra
.setCancelable(true)
.setPositiveButton(
R.string.dialog_continue
) { _: DialogInterface?, _: Int -> launchLogin() }
) { _: DialogInterface?, _: Int -> loginActivityLauncher.launch(null) }
.setNegativeButton(
R.string.dialog_close
) { _: DialogInterface?, _: Int -> }
Expand All @@ -96,11 +94,6 @@ class AccountListAdapter(private val context: AppCompatActivity, private val fra
}
}

private fun launchLogin() {
val loginIntent = Intent(context, OAuthLoginActivity::class.java)
fragment.startActivityForResult(loginIntent, 123)
}

override fun onBindContentItemViewHolder(
holder: RecyclerView.ViewHolder?,
position: Int
Expand Down
Loading
Loading