Skip to content

Commit 9f87edf

Browse files
committed
Migrate to new activity result API
1 parent 8f2f68b commit 9f87edf

File tree

10 files changed

+215
-202
lines changed

10 files changed

+215
-202
lines changed

src/main/java/org/quantumbadger/redreader/activities/BaseActivity.java

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package org.quantumbadger.redreader.activities;
1919

20-
import android.content.Intent;
2120
import android.content.pm.ActivityInfo;
2221
import android.content.pm.PackageManager;
2322
import android.content.res.TypedArray;
@@ -30,8 +29,8 @@
3029
import android.widget.FrameLayout;
3130
import android.widget.ImageView;
3231
import android.widget.TextView;
32+
3333
import androidx.annotation.NonNull;
34-
import androidx.annotation.Nullable;
3534
import androidx.appcompat.app.ActionBar;
3635
import androidx.appcompat.app.AppCompatActivity;
3736
import androidx.appcompat.widget.Toolbar;
@@ -60,9 +59,6 @@ public abstract class BaseActivity extends AppCompatActivity
6059
private final HashMap<Integer, PermissionCallback> mPermissionRequestCallbacks
6160
= new HashMap<>();
6261

63-
private final HashMap<Integer, ActivityResultCallback> mActivityResultCallbacks
64-
= new HashMap<>();
65-
6662
@NonNull private Optional<TextView> mActionbarTitleTextView = Optional.empty();
6763

6864
private FrameLayout mContentListing;
@@ -100,10 +96,6 @@ public interface PermissionCallback {
10096
void onPermissionDenied();
10197
}
10298

103-
public interface ActivityResultCallback {
104-
void onActivityResult(int resultCode, @Nullable Intent data);
105-
}
106-
10799
public void closeAllExceptMain() {
108100
closingAll = true;
109101
closeIfNecessary();
@@ -386,33 +378,6 @@ public final void onRequestPermissionsResult(
386378
}
387379
}
388380

389-
public final void startActivityForResultWithCallback(
390-
@NonNull final Intent intent,
391-
@NonNull final ActivityResultCallback callback) {
392-
393-
final int requestCode = mRequestIdGenerator.incrementAndGet();
394-
mActivityResultCallbacks.put(requestCode, callback);
395-
startActivityForResult(intent, requestCode);
396-
}
397-
398-
@Override
399-
protected final void onActivityResult(
400-
final int requestCode,
401-
final int resultCode,
402-
@Nullable final Intent data) {
403-
404-
super.onActivityResult(requestCode, resultCode, data);
405-
406-
final ActivityResultCallback callback
407-
= mActivityResultCallbacks.remove(requestCode);
408-
409-
if(callback == null) {
410-
return;
411-
}
412-
413-
callback.onActivityResult(resultCode, data);
414-
}
415-
416381
private void setOrientationFromPrefs() {
417382
final PrefsUtility.ScreenOrientation orientation
418383
= PrefsUtility.pref_behaviour_screen_orientation();

src/main/java/org/quantumbadger/redreader/activities/CommentReplyActivity.java

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@
3434
import android.widget.Spinner;
3535
import android.widget.TextView;
3636
import android.widget.Toast;
37+
38+
import androidx.activity.result.ActivityResultLauncher;
3739
import androidx.annotation.NonNull;
40+
import androidx.annotation.Nullable;
41+
3842
import org.quantumbadger.redreader.R;
3943
import org.quantumbadger.redreader.account.RedditAccount;
4044
import org.quantumbadger.redreader.account.RedditAccountManager;
@@ -68,6 +72,8 @@ private enum ParentType {
6872

6973
private ParentType mParentType;
7074

75+
private ActivityResultLauncher<Void> mImgurUploadActivityLauncher;
76+
7177
private boolean mDraftReset = false;
7278
private static String lastText;
7379
private static RedditIdAndType lastParentIdAndType;
@@ -109,6 +115,9 @@ protected void onCreate(final Bundle savedInstanceState) {
109115

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

118+
mImgurUploadActivityLauncher = registerForActivityResult(
119+
new ImgurUploadActivity.ResultContract(),
120+
this::onUploadedPicture);
112121
uploadPicture.setOnClickListener(v -> uploadPicture());
113122

114123
if(mParentType == ParentType.COMMENT_OR_POST) {
@@ -370,21 +379,18 @@ public void onBackPressed() {
370379
}
371380

372381
private void uploadPicture() {
373-
final Intent intent = new Intent(this, ImgurUploadActivity.class);
374-
startActivityForResultWithCallback(intent, (resultCode, data) -> {
375-
if (resultCode == 0 && data != null) {
376-
final Uri uploadedImageUrl = data.getData();
377-
if (uploadedImageUrl != null) {
378-
// set the picture into textedit as a link: [Picture](PictureURL)
379-
final String existingText = textEdit.getText().toString();
380-
final String picturePretext = getString(R.string.comment_picture_pretext);
381-
final String linkText =
382-
"["+ picturePretext +"](" + uploadedImageUrl + ")";
383-
final String combinedText = existingText + " " + linkText;
384-
textEdit.setText(combinedText);
385-
}
386-
}
387-
});
382+
mImgurUploadActivityLauncher.launch(null);
388383
}
389384

385+
private void onUploadedPicture(@Nullable final Uri uploadedImageUrl) {
386+
if (uploadedImageUrl != null) {
387+
// set the picture into textedit as a link: [Picture](PictureURL)
388+
final String existingText = textEdit.getText().toString();
389+
final String picturePretext = getString(R.string.comment_picture_pretext);
390+
final String linkText =
391+
"["+ picturePretext +"](" + uploadedImageUrl + ")";
392+
final String combinedText = existingText + " " + linkText;
393+
textEdit.setText(combinedText);
394+
}
395+
}
390396
}

src/main/java/org/quantumbadger/redreader/activities/ImgurUploadActivity.java

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.quantumbadger.redreader.activities;
1919

20+
import android.content.Context;
2021
import android.content.Intent;
2122
import android.graphics.Bitmap;
2223
import android.graphics.BitmapFactory;
@@ -31,7 +32,13 @@
3132
import android.widget.LinearLayout;
3233
import android.widget.ScrollView;
3334
import android.widget.TextView;
35+
36+
import androidx.activity.result.ActivityResultLauncher;
37+
import androidx.activity.result.contract.ActivityResultContract;
38+
import androidx.activity.result.contract.ActivityResultContracts;
3439
import androidx.annotation.NonNull;
40+
import androidx.annotation.Nullable;
41+
3542
import org.quantumbadger.redreader.R;
3643
import org.quantumbadger.redreader.account.RedditAccountManager;
3744
import org.quantumbadger.redreader.cache.CacheManager;
@@ -71,6 +78,8 @@ public class ImgurUploadActivity extends BaseActivity {
7178

7279
private View mLoadingOverlay;
7380

81+
private ActivityResultLauncher<String> mSelectImageActivityLauncher;
82+
7483
@Override
7584
protected void onCreate(final Bundle savedInstanceState) {
7685

@@ -105,21 +114,15 @@ protected void onCreate(final Bundle savedInstanceState) {
105114
layout.addView(mThumbnailView);
106115
General.setAllMarginsDp(this, mThumbnailView, 20);
107116

117+
mSelectImageActivityLauncher = registerForActivityResult(
118+
new ActivityResultContracts.GetContent(),
119+
uri -> {
120+
if (uri != null) {
121+
onImageSelected(uri);
122+
}
123+
});
108124
browseButton.setOnClickListener(v -> {
109-
final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
110-
intent.setType("image/*");
111-
startActivityForResultWithCallback(intent, (resultCode, data) -> {
112-
113-
if(data == null || data.getData() == null) {
114-
return;
115-
}
116-
117-
if(resultCode != RESULT_OK) {
118-
return;
119-
}
120-
121-
onImageSelected(data.getData());
122-
});
125+
mSelectImageActivityLauncher.launch("image/*");
123126
});
124127

125128
mUploadButton.setOnClickListener(v -> {
@@ -331,7 +334,7 @@ public void onJsonParsed(
331334

332335
final Intent resultIntent = new Intent();
333336
resultIntent.setData(imageUri);
334-
setResult(0, resultIntent);
337+
setResult(RESULT_OK, resultIntent);
335338
finish();
336339
});
337340
}
@@ -354,4 +357,20 @@ public void onBackPressed() {
354357
super.onBackPressed();
355358
}
356359
}
360+
361+
public static class ResultContract extends ActivityResultContract<Void, Uri> {
362+
@NonNull
363+
@Override
364+
public Intent createIntent(@NonNull final Context context, final Void unused) {
365+
return new Intent(context, ImgurUploadActivity.class);
366+
}
367+
368+
@Override
369+
public Uri parseResult(final int resultCode, @Nullable final Intent intent) {
370+
if (resultCode == RESULT_OK && intent != null) {
371+
return intent.getData();
372+
}
373+
return null;
374+
}
375+
}
357376
}

src/main/java/org/quantumbadger/redreader/activities/OAuthLoginActivity.java

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,21 @@
1818
package org.quantumbadger.redreader.activities;
1919

2020
import android.annotation.SuppressLint;
21+
import android.content.Context;
2122
import android.content.Intent;
23+
import android.net.Uri;
2224
import android.os.Bundle;
2325
import android.webkit.ConsoleMessage;
2426
import android.webkit.CookieManager;
2527
import android.webkit.WebChromeClient;
2628
import android.webkit.WebSettings;
2729
import android.webkit.WebView;
2830
import android.webkit.WebViewClient;
29-
import info.guardianproject.netcipher.webkit.WebkitProxy;
31+
32+
import androidx.activity.result.contract.ActivityResultContract;
33+
import androidx.annotation.NonNull;
34+
import androidx.annotation.Nullable;
35+
3036
import org.quantumbadger.redreader.R;
3137
import org.quantumbadger.redreader.RedReader;
3238
import org.quantumbadger.redreader.common.General;
@@ -36,6 +42,8 @@
3642

3743
import java.net.URI;
3844

45+
import info.guardianproject.netcipher.webkit.WebkitProxy;
46+
3947
public class OAuthLoginActivity extends BaseActivity {
4048

4149
private WebView mWebView;
@@ -106,8 +114,8 @@ public boolean shouldOverrideUrlLoading(
106114
|| url.startsWith("redreader://rr_oauth_redir")) { // TODO constant
107115

108116
final Intent intent = new Intent();
109-
intent.putExtra("url", url);
110-
setResult(123, intent);
117+
intent.setData(Uri.parse(url));
118+
setResult(RESULT_OK, intent);
111119
finish();
112120

113121
} else {
@@ -144,4 +152,20 @@ protected void onResume() {
144152
mWebView.onResume();
145153
}
146154
}
155+
156+
public static class ResultContract extends ActivityResultContract<Void, Uri> {
157+
@NonNull
158+
@Override
159+
public Intent createIntent(@NonNull final Context context, final Void unused) {
160+
return new Intent(context, OAuthLoginActivity.class);
161+
}
162+
163+
@Override
164+
public Uri parseResult(final int resultCode, @Nullable final Intent intent) {
165+
if (resultCode == RESULT_OK && intent != null) {
166+
return intent.getData();
167+
}
168+
return null;
169+
}
170+
}
147171
}

src/main/java/org/quantumbadger/redreader/adapters/AccountListAdapter.kt

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,27 @@
1717
package org.quantumbadger.redreader.adapters
1818

1919
import android.content.DialogInterface
20-
import android.content.Intent
2120
import android.graphics.Color
2221
import android.graphics.Paint
2322
import android.graphics.drawable.Drawable
2423
import android.view.LayoutInflater
2524
import android.view.ViewGroup
25+
import androidx.activity.result.ActivityResultLauncher
2626
import androidx.annotation.StringRes
2727
import androidx.appcompat.app.AppCompatActivity
2828
import androidx.appcompat.content.res.AppCompatResources
29-
import androidx.fragment.app.Fragment
3029
import androidx.recyclerview.widget.RecyclerView
3130
import com.google.android.material.dialog.MaterialAlertDialogBuilder
3231
import com.google.android.material.textview.MaterialTextView
3332
import org.quantumbadger.redreader.R
3433
import org.quantumbadger.redreader.account.RedditAccountManager
35-
import org.quantumbadger.redreader.activities.OAuthLoginActivity
3634
import org.quantumbadger.redreader.common.BetterSSB
3735
import org.quantumbadger.redreader.common.LinkHandler
3836
import org.quantumbadger.redreader.reddit.api.RedditOAuth.needsRelogin
3937
import org.quantumbadger.redreader.viewholders.VH1Text
4038

4139

42-
class AccountListAdapter(private val context: AppCompatActivity, private val fragment: Fragment) :
40+
class AccountListAdapter(private val context: AppCompatActivity, private val loginActivityLauncher: ActivityResultLauncher<Void>) :
4341
HeaderRecyclerAdapter<RecyclerView.ViewHolder?>() {
4442
private val accounts = RedditAccountManager.getInstance(context).accounts
4543
private val rrIconAdd: Drawable?
@@ -81,7 +79,7 @@ class AccountListAdapter(private val context: AppCompatActivity, private val fra
8179
.setCancelable(true)
8280
.setPositiveButton(
8381
R.string.dialog_continue
84-
) { _: DialogInterface?, _: Int -> launchLogin() }
82+
) { _: DialogInterface?, _: Int -> loginActivityLauncher.launch(null) }
8583
.setNegativeButton(
8684
R.string.dialog_close
8785
) { _: DialogInterface?, _: Int -> }
@@ -95,11 +93,6 @@ class AccountListAdapter(private val context: AppCompatActivity, private val fra
9593
}
9694
}
9795

98-
private fun launchLogin() {
99-
val loginIntent = Intent(context, OAuthLoginActivity::class.java)
100-
fragment.startActivityForResult(loginIntent, 123)
101-
}
102-
10396
override fun onBindContentItemViewHolder(
10497
holder: RecyclerView.ViewHolder?,
10598
position: Int

0 commit comments

Comments
 (0)