Skip to content

Commit 8b5abd2

Browse files
committed
Migrate to new activity result API
1 parent 5342225 commit 8b5abd2

File tree

10 files changed

+198
-205
lines changed

10 files changed

+198
-205
lines changed

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

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,13 @@
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.os.Build;
2423
import android.os.Bundle;
2524
import android.view.WindowManager;
2625

2726
import androidx.annotation.NonNull;
28-
import androidx.annotation.Nullable;
2927
import androidx.appcompat.app.AppCompatActivity;
3028

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

53-
private final HashMap<Integer, ActivityResultCallback> mActivityResultCallbacks
54-
= new HashMap<>();
55-
5651
public interface PermissionCallback {
5752
void onPermissionGranted();
5853

5954
void onPermissionDenied();
6055
}
6156

62-
public interface ActivityResultCallback {
63-
void onActivityResult(int resultCode, @Nullable Intent data);
64-
}
65-
6657
public void closeAllExceptMain() {
6758
closingAll = true;
6859
closeIfNecessary();
@@ -170,33 +161,6 @@ public final void onRequestPermissionsResult(
170161
}
171162
}
172163

173-
public final void startActivityForResultWithCallback(
174-
@NonNull final Intent intent,
175-
@NonNull final ActivityResultCallback callback) {
176-
177-
final int requestCode = mRequestIdGenerator.incrementAndGet();
178-
mActivityResultCallbacks.put(requestCode, callback);
179-
startActivityForResult(intent, requestCode);
180-
}
181-
182-
@Override
183-
protected final void onActivityResult(
184-
final int requestCode,
185-
final int resultCode,
186-
@Nullable final Intent data) {
187-
188-
super.onActivityResult(requestCode, resultCode, data);
189-
190-
final ActivityResultCallback callback
191-
= mActivityResultCallbacks.remove(requestCode);
192-
193-
if (callback == null) {
194-
return;
195-
}
196-
197-
callback.onActivityResult(resultCode, data);
198-
}
199-
200164
private void setOrientationFromPrefs() {
201165
final PrefsUtility.ScreenOrientation orientation
202166
= PrefsUtility.pref_behaviour_screen_orientation();

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

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535
import android.widget.TextView;
3636
import android.widget.Toast;
3737

38+
import androidx.activity.result.ActivityResultLauncher;
3839
import androidx.annotation.NonNull;
40+
import androidx.annotation.Nullable;
3941

4042
import org.quantumbadger.redreader.R;
4143
import org.quantumbadger.redreader.account.RedditAccount;
@@ -71,6 +73,8 @@ private enum ParentType {
7173

7274
private ParentType mParentType;
7375

76+
private ActivityResultLauncher<Void> mImgurUploadActivityLauncher;
77+
7478
private boolean mDraftReset = false;
7579
private static String lastText;
7680
private static RedditIdAndType lastParentIdAndType;
@@ -112,6 +116,9 @@ protected void onCreate(final Bundle savedInstanceState) {
112116

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

119+
mImgurUploadActivityLauncher = registerForActivityResult(
120+
new ImgurUploadActivity.ResultContract(),
121+
this::onUploadedPicture);
115122
uploadPicture.setOnClickListener(v -> uploadPicture());
116123

117124
if(mParentType == ParentType.COMMENT_OR_POST) {
@@ -372,21 +379,18 @@ public void onBackPressed() {
372379
}
373380

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

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+
}
392396
}

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

Lines changed: 32 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;
@@ -32,7 +33,11 @@
3233
import android.widget.ScrollView;
3334
import android.widget.TextView;
3435

36+
import androidx.activity.result.ActivityResultLauncher;
37+
import androidx.activity.result.contract.ActivityResultContract;
38+
import androidx.activity.result.contract.ActivityResultContracts;
3539
import androidx.annotation.NonNull;
40+
import androidx.annotation.Nullable;
3641

3742
import org.quantumbadger.redreader.R;
3843
import org.quantumbadger.redreader.account.RedditAccountManager;
@@ -74,6 +79,8 @@ public class ImgurUploadActivity extends ViewsBaseActivity {
7479

7580
private View mLoadingOverlay;
7681

82+
private ActivityResultLauncher<String> mSelectImageActivityLauncher;
83+
7784
@Override
7885
protected void onCreate(final Bundle savedInstanceState) {
7986

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

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

128129
mUploadButton.setOnClickListener(v -> {
@@ -336,7 +337,7 @@ public void onJsonParsed(
336337

337338
final Intent resultIntent = new Intent();
338339
resultIntent.setData(imageUri);
339-
setResult(0, resultIntent);
340+
setResult(RESULT_OK, resultIntent);
340341
finish();
341342
});
342343
}
@@ -359,4 +360,20 @@ public void onBackPressed() {
359360
super.onBackPressed();
360361
}
361362
}
363+
364+
public static class ResultContract extends ActivityResultContract<Void, Uri> {
365+
@NonNull
366+
@Override
367+
public Intent createIntent(@NonNull final Context context, final Void unused) {
368+
return new Intent(context, ImgurUploadActivity.class);
369+
}
370+
371+
@Override
372+
public Uri parseResult(final int resultCode, @Nullable final Intent intent) {
373+
if (resultCode == RESULT_OK && intent != null) {
374+
return intent.getData();
375+
}
376+
return null;
377+
}
378+
}
362379
}

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

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.quantumbadger.redreader.activities;
1919

2020
import android.annotation.SuppressLint;
21+
import android.content.Context;
2122
import android.content.Intent;
2223
import android.net.Uri;
2324
import android.os.Bundle;
@@ -28,14 +29,18 @@
2829
import android.webkit.WebView;
2930
import android.webkit.WebViewClient;
3031

32+
import androidx.activity.result.contract.ActivityResultContract;
33+
import androidx.annotation.NonNull;
34+
import androidx.annotation.Nullable;
35+
36+
import info.guardianproject.netcipher.webkit.WebkitProxy;
37+
3138
import org.quantumbadger.redreader.R;
3239
import org.quantumbadger.redreader.RedReader;
3340
import org.quantumbadger.redreader.common.PrefsUtility;
3441
import org.quantumbadger.redreader.common.TorCommon;
3542
import org.quantumbadger.redreader.reddit.api.RedditOAuth;
3643

37-
import info.guardianproject.netcipher.webkit.WebkitProxy;
38-
3944
public class OAuthLoginActivity extends ViewsBaseActivity {
4045

4146
private WebView mWebView;
@@ -106,8 +111,8 @@ public boolean shouldOverrideUrlLoading(
106111
|| url.startsWith("redreader://rr_oauth_redir")) { // TODO constant
107112

108113
final Intent intent = new Intent();
109-
intent.putExtra("url", url);
110-
setResult(123, intent);
114+
intent.setData(Uri.parse(url));
115+
setResult(RESULT_OK, intent);
111116
finish();
112117

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

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

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,28 @@
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.common.UriString
3937
import org.quantumbadger.redreader.reddit.api.RedditOAuth.needsRelogin
4038
import org.quantumbadger.redreader.viewholders.VH1Text
4139

4240

43-
class AccountListAdapter(private val context: AppCompatActivity, private val fragment: Fragment) :
41+
class AccountListAdapter(private val context: AppCompatActivity, private val loginActivityLauncher: ActivityResultLauncher<Void>) :
4442
HeaderRecyclerAdapter<RecyclerView.ViewHolder?>() {
4543
private val accounts = RedditAccountManager.getInstance(context).accounts
4644
private val rrIconAdd: Drawable?
@@ -82,7 +80,7 @@ class AccountListAdapter(private val context: AppCompatActivity, private val fra
8280
.setCancelable(true)
8381
.setPositiveButton(
8482
R.string.dialog_continue
85-
) { _: DialogInterface?, _: Int -> launchLogin() }
83+
) { _: DialogInterface?, _: Int -> loginActivityLauncher.launch(null) }
8684
.setNegativeButton(
8785
R.string.dialog_close
8886
) { _: DialogInterface?, _: Int -> }
@@ -96,11 +94,6 @@ class AccountListAdapter(private val context: AppCompatActivity, private val fra
9694
}
9795
}
9896

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

0 commit comments

Comments
 (0)