mirror of
https://github.com/TrianguloY/UrlChecker.git
synced 2024-09-19 20:02:16 +02:00
ActivityResultInjector renamed to ResultCodeInjector, can now be used for permissions
This commit is contained in:
parent
2af18b34d7
commit
e2a4776881
@ -10,7 +10,7 @@ import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.trianguloy.urlchecker.R;
|
||||
import com.trianguloy.urlchecker.fragments.ActivityResultInjector;
|
||||
import com.trianguloy.urlchecker.fragments.ResultCodeInjector;
|
||||
import com.trianguloy.urlchecker.modules.companions.VersionManager;
|
||||
import com.trianguloy.urlchecker.utilities.AndroidSettings;
|
||||
import com.trianguloy.urlchecker.utilities.methods.AndroidUtils;
|
||||
@ -21,7 +21,7 @@ import com.trianguloy.urlchecker.utilities.methods.PackageUtils;
|
||||
*/
|
||||
public class MainActivity extends Activity {
|
||||
|
||||
private final ActivityResultInjector activityResultInjector = new ActivityResultInjector();
|
||||
private final ResultCodeInjector resultCodeInjector = new ResultCodeInjector();
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@ -57,7 +57,7 @@ public class MainActivity extends Activity {
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (!activityResultInjector.onActivityResult(requestCode, resultCode, data))
|
||||
if (!resultCodeInjector.onActivityResult(requestCode, resultCode, data))
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@ public class MainActivity extends Activity {
|
||||
public void openSettings(View view) {
|
||||
PackageUtils.startActivityForResult(
|
||||
new Intent(this, SettingsActivity.class),
|
||||
AndroidSettings.registerForReloading(activityResultInjector, this),
|
||||
AndroidSettings.registerForReloading(resultCodeInjector, this),
|
||||
R.string.toast_noApp,
|
||||
this
|
||||
);
|
||||
|
@ -10,8 +10,8 @@ import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
|
||||
import com.trianguloy.urlchecker.R;
|
||||
import com.trianguloy.urlchecker.fragments.ActivityResultInjector;
|
||||
import com.trianguloy.urlchecker.fragments.BrowserButtonsFragment;
|
||||
import com.trianguloy.urlchecker.fragments.ResultCodeInjector;
|
||||
import com.trianguloy.urlchecker.utilities.AndroidSettings;
|
||||
import com.trianguloy.urlchecker.utilities.methods.AndroidUtils;
|
||||
import com.trianguloy.urlchecker.utilities.methods.PackageUtils;
|
||||
@ -53,8 +53,8 @@ public class SettingsActivity extends Activity {
|
||||
|
||||
/* ------------------- configure browser ------------------- */
|
||||
|
||||
private final ActivityResultInjector activityResultInjector = new ActivityResultInjector();
|
||||
private final BrowserButtonsFragment browserButtons = new BrowserButtonsFragment(this, activityResultInjector);
|
||||
private final ResultCodeInjector resultCodeInjector = new ResultCodeInjector();
|
||||
private final BrowserButtonsFragment browserButtons = new BrowserButtonsFragment(this, resultCodeInjector);
|
||||
|
||||
private void configureBrowserButtons() {
|
||||
browserButtons.onInitialize(findViewById(browserButtons.getLayoutId()));
|
||||
@ -62,7 +62,7 @@ public class SettingsActivity extends Activity {
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (!activityResultInjector.onActivityResult(requestCode, resultCode, data))
|
||||
if (!resultCodeInjector.onActivityResult(requestCode, resultCode, data))
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
|
@ -10,8 +10,8 @@ import android.widget.TextView;
|
||||
import android.widget.ViewFlipper;
|
||||
|
||||
import com.trianguloy.urlchecker.R;
|
||||
import com.trianguloy.urlchecker.fragments.ActivityResultInjector;
|
||||
import com.trianguloy.urlchecker.fragments.BrowserButtonsFragment;
|
||||
import com.trianguloy.urlchecker.fragments.ResultCodeInjector;
|
||||
import com.trianguloy.urlchecker.utilities.AndroidSettings;
|
||||
import com.trianguloy.urlchecker.utilities.generics.GenericPref;
|
||||
import com.trianguloy.urlchecker.utilities.methods.PackageUtils;
|
||||
@ -55,8 +55,8 @@ public class TutorialActivity extends Activity {
|
||||
|
||||
/* ------------------- browser fragment ------------------- */
|
||||
|
||||
private final ActivityResultInjector activityResultInjector = new ActivityResultInjector();
|
||||
private final BrowserButtonsFragment browserButtons = new BrowserButtonsFragment(this, activityResultInjector);
|
||||
private final ResultCodeInjector resultCodeInjector = new ResultCodeInjector();
|
||||
private final BrowserButtonsFragment browserButtons = new BrowserButtonsFragment(this, resultCodeInjector);
|
||||
|
||||
private void configureBrowserButtons() {
|
||||
browserButtons.onInitialize(findViewById(browserButtons.getLayoutId()));
|
||||
@ -64,7 +64,7 @@ public class TutorialActivity extends Activity {
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (!activityResultInjector.onActivityResult(requestCode, resultCode, data))
|
||||
if (!resultCodeInjector.onActivityResult(requestCode, resultCode, data))
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
|
@ -1,64 +0,0 @@
|
||||
package com.trianguloy.urlchecker.fragments;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import com.trianguloy.urlchecker.utilities.methods.AndroidUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* An injector to allow registering for activityResult.
|
||||
* Alternative to using the deprecate android fragments (and without using the huge compatibility library)
|
||||
*/
|
||||
public class ActivityResultInjector {
|
||||
private static final int RESERVED = 123; // just in case, registered listeners will have requestCode >= this
|
||||
private final List<Listener> listeners = new ArrayList<>();
|
||||
|
||||
/* ------------------- client use ------------------- */
|
||||
|
||||
public interface Listener {
|
||||
/**
|
||||
* Called when the event fires for a particular registrar
|
||||
*/
|
||||
void onActivityResult(int resultCode, Intent data);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this to register an onActivityResult listener. Returns the requestCode you must use in the startActivityForResult call
|
||||
*/
|
||||
public int register(Listener listener) {
|
||||
listeners.add(listener);
|
||||
return RESERVED + listeners.size() - 1;
|
||||
}
|
||||
|
||||
/* ------------------- activity use ------------------- */
|
||||
|
||||
/**
|
||||
* An activity must use this as:
|
||||
* <pre>
|
||||
* @Override
|
||||
* public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
* if (!activityResultInjector.onActivityResult(requestCode, resultCode, data))
|
||||
* super.onActivityResult(requestCode, resultCode, data);
|
||||
* }
|
||||
* </pre>
|
||||
*/
|
||||
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
var index = requestCode - RESERVED;
|
||||
if (index < 0) {
|
||||
// external
|
||||
Log.d("ACTIVITY_RESULT", "External request code (" + requestCode + "), consider using ActivityResultInjector");
|
||||
return false;
|
||||
}
|
||||
if (index >= listeners.size()) {
|
||||
// external?
|
||||
AndroidUtils.assertError("Invalid request code (" + requestCode + "), consider using ActivityResultInjector or a requestCode less than " + RESERVED);
|
||||
return false;
|
||||
}
|
||||
listeners.get(index).onActivityResult(resultCode, data);
|
||||
return true;
|
||||
}
|
||||
}
|
@ -15,14 +15,14 @@ import android.widget.Toast;
|
||||
import com.trianguloy.urlchecker.R;
|
||||
import com.trianguloy.urlchecker.utilities.methods.PackageUtils;
|
||||
|
||||
public class BrowserButtonsFragment implements Fragment, ActivityResultInjector.Listener {
|
||||
public class BrowserButtonsFragment implements Fragment, ResultCodeInjector.ActivityResultListener {
|
||||
private final Activity cntx;
|
||||
private final int requestCode;
|
||||
private RoleManager roleManager;
|
||||
|
||||
public BrowserButtonsFragment(Activity cntx, ActivityResultInjector activityResultInjector) {
|
||||
public BrowserButtonsFragment(Activity cntx, ResultCodeInjector resultCodeInjector) {
|
||||
this.cntx = cntx;
|
||||
requestCode = activityResultInjector.register(this);
|
||||
requestCode = resultCodeInjector.registerActivityResult(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,105 @@
|
||||
package com.trianguloy.urlchecker.fragments;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import com.trianguloy.urlchecker.utilities.methods.AndroidUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* An injector to allow registering for activityResult and requestPermissionsResult.
|
||||
* Alternative to using the deprecate android fragments (and without using the huge compatibility library)
|
||||
*/
|
||||
public class ResultCodeInjector {
|
||||
private static final int RESERVED = 123; // just in case, registered listeners will have requestCode >= this
|
||||
private final List<ActivityResultListener> activityResultListeners = new ArrayList<>();
|
||||
private final List<RequestPermissionsResultListener> requestPermissionsResultListeners = new ArrayList<>();
|
||||
|
||||
/* ------------------- client use ------------------- */
|
||||
|
||||
public interface ActivityResultListener {
|
||||
/**
|
||||
* Called when the event fires for a particular registrar
|
||||
*/
|
||||
void onActivityResult(int resultCode, Intent data);
|
||||
}
|
||||
|
||||
public interface RequestPermissionsResultListener {
|
||||
/**
|
||||
* Called when the event fires for a particular registrar
|
||||
*/
|
||||
void onRequestPermissionsResult(String[] permissions, int[] grantResults);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this to register an onActivityResult listener. Returns the requestCode you must use in the startActivityForResult call
|
||||
*/
|
||||
public int registerActivityResult(ActivityResultListener activityResultListener) {
|
||||
activityResultListeners.add(activityResultListener);
|
||||
return RESERVED + activityResultListeners.size() - 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this to register an onActivityResult listener. Returns the requestCode you must use in the startActivityForResult call
|
||||
*/
|
||||
public int registerPermissionsResult(RequestPermissionsResultListener requestPermissionsResultListener) {
|
||||
requestPermissionsResultListeners.add(requestPermissionsResultListener);
|
||||
return RESERVED + requestPermissionsResultListeners.size() - 1;
|
||||
}
|
||||
|
||||
/* ------------------- activity use ------------------- */
|
||||
|
||||
/**
|
||||
* An activity must use this as:
|
||||
* <pre>
|
||||
* @Override
|
||||
* public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
* if (!resultCodeInjector.onActivityResult(requestCode, resultCode, data))
|
||||
* super.onActivityResult(requestCode, resultCode, data);
|
||||
* }
|
||||
* </pre>
|
||||
*/
|
||||
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
var index = requestCode - RESERVED;
|
||||
if (index < 0) {
|
||||
// external
|
||||
Log.d("ACTIVITY_RESULT", "External request code (" + requestCode + "), consider using ResultCodeInjector");
|
||||
return false;
|
||||
}
|
||||
if (index >= activityResultListeners.size()) {
|
||||
// external?
|
||||
AndroidUtils.assertError("Invalid request code (" + requestCode + "), consider using ResultCodeInjector or a requestCode less than " + RESERVED);
|
||||
return false;
|
||||
}
|
||||
activityResultListeners.get(index).onActivityResult(resultCode, data);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* An activity must use this as:
|
||||
* <pre>
|
||||
* @Override
|
||||
* public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||
* if (!resultCodeInjector.onRequestPermissionsResult(requestCode, permissions, grantResults))
|
||||
* super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
* }
|
||||
* </pre>
|
||||
*/
|
||||
public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||
var index = requestCode - RESERVED;
|
||||
if (index < 0) {
|
||||
// external
|
||||
Log.d("ACTIVITY_RESULT", "External request code (" + requestCode + "), consider using ResultCodeInjector");
|
||||
return false;
|
||||
}
|
||||
if (index >= requestPermissionsResultListeners.size()) {
|
||||
// external?
|
||||
AndroidUtils.assertError("Invalid request code (" + requestCode + "), consider using ResultCodeInjector or a requestCode less than " + RESERVED);
|
||||
return false;
|
||||
}
|
||||
requestPermissionsResultListeners.get(index).onRequestPermissionsResult(permissions, grantResults);
|
||||
return true;
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@ import android.util.Log;
|
||||
|
||||
import com.trianguloy.urlchecker.BuildConfig;
|
||||
import com.trianguloy.urlchecker.R;
|
||||
import com.trianguloy.urlchecker.fragments.ActivityResultInjector;
|
||||
import com.trianguloy.urlchecker.fragments.ResultCodeInjector;
|
||||
import com.trianguloy.urlchecker.utilities.generics.GenericPref;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -220,8 +220,8 @@ public interface AndroidSettings {
|
||||
/**
|
||||
* Registers an activity result to reload if the launched activity is marked as reloading using{@link AndroidSettings#markForReloading(Activity)}
|
||||
*/
|
||||
static int registerForReloading(ActivityResultInjector activityResultInjector, Activity cntx) {
|
||||
return activityResultInjector.register((resultCode, data) -> {
|
||||
static int registerForReloading(ResultCodeInjector resultCodeInjector, Activity cntx) {
|
||||
return resultCodeInjector.registerActivityResult((resultCode, data) -> {
|
||||
if (resultCode == RELOAD_RESULT_CODE) {
|
||||
AndroidSettings.reload(cntx);
|
||||
}
|
||||
@ -229,7 +229,7 @@ public interface AndroidSettings {
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes the activity that launched this one to reload, if registered with {@link AndroidSettings#registerForReloading(ActivityResultInjector, Activity)}
|
||||
* Makes the activity that launched this one to reload, if registered with {@link AndroidSettings#registerForReloading(ResultCodeInjector, Activity)}
|
||||
*/
|
||||
static void markForReloading(Activity cntx) {
|
||||
cntx.setResult(RELOAD_RESULT_CODE);
|
||||
|
Loading…
Reference in New Issue
Block a user