0
0
mirror of https://github.com/TrianguloY/UrlChecker.git synced 2024-09-19 20:02:16 +02:00

remove deprecated android fragment class

This commit is contained in:
TrianguloY 2023-01-28 20:20:32 +01:00
parent 4c723b8bff
commit 84144a8665
9 changed files with 157 additions and 70 deletions

View File

@ -10,6 +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.utilities.AndroidSettings;
import com.trianguloy.urlchecker.utilities.AndroidUtils;
import com.trianguloy.urlchecker.utilities.PackageUtils;
@ -30,6 +32,7 @@ public class SettingsActivity extends Activity {
setTitle(R.string.a_settings);
AndroidUtils.configureUp(this);
configureBrowserButtons();
configureDayNight();
configureLocale();
}
@ -45,6 +48,21 @@ public class SettingsActivity extends Activity {
return super.onOptionsItemSelected(item);
}
/* ------------------- configure browser ------------------- */
private final ActivityResultInjector activityResultInjector = new ActivityResultInjector();
private final BrowserButtonsFragment browserButtons = new BrowserButtonsFragment(this, activityResultInjector);
private void configureBrowserButtons() {
browserButtons.onInitialize(findViewById(browserButtons.getLayoutId()));
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!activityResultInjector.onActivityResult(requestCode, resultCode, data))
super.onActivityResult(requestCode, resultCode, data);
}
/* ------------------- day/night ------------------- */
/**
@ -101,7 +119,7 @@ public class SettingsActivity extends Activity {
/* ------------------- tutorial ------------------- */
public void openTutorial(View view){
public void openTutorial(View view) {
PackageUtils.startActivity(new Intent(this, TutorialActivity.class), R.string.toast_noApp, this);
}
}

View File

@ -10,6 +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.utilities.AndroidSettings;
import com.trianguloy.urlchecker.utilities.GenericPref;
import com.trianguloy.urlchecker.utilities.PackageUtils;
@ -43,10 +45,26 @@ public class TutorialActivity extends Activity {
nextButton = findViewById(R.id.bNext);
pageIndexText = findViewById(R.id.pageIndex);
configureBrowserButtons();
updateButtons();
}
/* ------------------- browser fragment ------------------- */
private final ActivityResultInjector activityResultInjector = new ActivityResultInjector();
private final BrowserButtonsFragment browserButtons = new BrowserButtonsFragment(this, activityResultInjector);
private void configureBrowserButtons() {
browserButtons.onInitialize(findViewById(browserButtons.getLayoutId()));
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!activityResultInjector.onActivityResult(requestCode, resultCode, data))
super.onActivityResult(requestCode, resultCode, data);
}
/* ------------------- buttons ------------------- */
@Override

View File

@ -0,0 +1,64 @@
package com.trianguloy.urlchecker.fragments;
import android.content.Intent;
import android.util.Log;
import com.trianguloy.urlchecker.utilities.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 ------------------- */
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;
}
}

View File

@ -2,33 +2,37 @@ package com.trianguloy.urlchecker.fragments;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Fragment;
import android.app.role.RoleManager;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import com.trianguloy.urlchecker.R;
import com.trianguloy.urlchecker.utilities.PackageUtils;
public class BrowserButtonsFragment extends Fragment {
public static final int REQUEST_CODE = 2;
public class BrowserButtonsFragment implements Fragment, ActivityResultInjector.Listener {
private final Activity cntx;
private final int requestCode;
private RoleManager roleManager;
public BrowserButtonsFragment(Activity cntx, ActivityResultInjector activityResultInjector) {
this.cntx = cntx;
requestCode = activityResultInjector.register(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_browser_buttons, container, false);
configureBrowserButtons(view);
return view;
public int getLayoutId() {
return R.id.browser_buttons;
}
@Override
public void onInitialize(View views) {
configureBrowserButtons(views);
}
// adapted from https://stackoverflow.com/a/74108806
@ -44,7 +48,7 @@ public class BrowserButtonsFragment extends Fragment {
boolean hide = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
roleManager = getActivity().getSystemService(RoleManager.class);
roleManager = cntx.getSystemService(RoleManager.class);
if (roleManager.isRoleAvailable(RoleManager.ROLE_BROWSER)) {
hide = false;
}
@ -70,20 +74,15 @@ public class BrowserButtonsFragment extends Fragment {
*/
@TargetApi(Build.VERSION_CODES.Q)
public void chooseBrowserPopup() {
startActivityForResult(roleManager.createRequestRoleIntent(RoleManager.ROLE_BROWSER), REQUEST_CODE);
cntx.startActivityForResult(roleManager.createRequestRoleIntent(RoleManager.ROLE_BROWSER), requestCode);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode != REQUEST_CODE) {
super.onActivityResult(requestCode, resultCode, data);
return;
}
public void onActivityResult(int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
Toast.makeText(getActivity(), R.string.toast_defaultSet, Toast.LENGTH_LONG).show();
Toast.makeText(cntx, R.string.toast_defaultSet, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), R.string.canceled, Toast.LENGTH_LONG).show();
Toast.makeText(cntx, R.string.canceled, Toast.LENGTH_LONG).show();
}
}
@ -105,7 +104,7 @@ public class BrowserButtonsFragment extends Fragment {
bundle
);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PackageUtils.startActivity(intent, R.string.toast_noApp, getActivity());
PackageUtils.startActivity(intent, R.string.toast_noApp, cntx);
}
// adapted from https://groups.google.com/g/androidscript/c/cLq7eiUVpig/m/RDraxFYQCgAJ
@ -117,8 +116,8 @@ public class BrowserButtonsFragment extends Fragment {
public void openAppLinks() {
PackageUtils.startActivity(new Intent(
Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS,
Uri.parse("package:" + getActivity().getPackageName())
), R.string.toast_noApp, getActivity());
Uri.parse("package:" + cntx.getPackageName())
), R.string.toast_noApp, cntx);
}
/**
@ -127,9 +126,7 @@ public class BrowserButtonsFragment extends Fragment {
public void openAppDetails() {
PackageUtils.startActivity(new Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.parse("package:" + getActivity().getPackageName())
), R.string.toast_noApp, getActivity());
Uri.parse("package:" + cntx.getPackageName())
), R.string.toast_noApp, cntx);
}
}

View File

@ -1,4 +1,4 @@
package com.trianguloy.urlchecker.utilities;
package com.trianguloy.urlchecker.fragments;
import android.view.View;

View File

@ -3,7 +3,7 @@ package com.trianguloy.urlchecker.modules;
import android.app.Activity;
import com.trianguloy.urlchecker.activities.ModulesActivity;
import com.trianguloy.urlchecker.utilities.Fragment;
import com.trianguloy.urlchecker.fragments.Fragment;
/**
* Base class for a module configuration fragment

View File

@ -3,8 +3,8 @@ package com.trianguloy.urlchecker.modules;
import android.app.Activity;
import com.trianguloy.urlchecker.dialogs.MainDialog;
import com.trianguloy.urlchecker.fragments.Fragment;
import com.trianguloy.urlchecker.url.UrlData;
import com.trianguloy.urlchecker.utilities.Fragment;
/**
* Base class for a module's dialog fragment.

View File

@ -29,12 +29,7 @@
android:layout_height="wrap_content"
android:text="@string/txt_openLinks" />
<fragment
android:id="@+id/browser_buttons"
class="com.trianguloy.urlchecker.fragments.BrowserButtonsFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:layout="@layout/fragment_browser_buttons" />
<include layout="@layout/fragment_browser_buttons" />
<FrameLayout
android:layout_width="match_parent"

View File

@ -19,12 +19,12 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
<ImageButton
android:id="@+id/imageButton"
@ -45,40 +45,35 @@
android:gravity="center"
android:text="@string/tutorial_txt_intro" />
</LinearLayout>
</LinearLayout>
</ScrollView><ScrollView
android:id="@+id/p2"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/tutorial_txt_app" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/tutorial_txt_app" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/padding"
android:gravity="center"
android:text="@string/txt_openLinks" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/padding"
android:gravity="center"
android:text="@string/txt_openLinks" />
<fragment
android:id="@+id/browser_buttons"
class="com.trianguloy.urlchecker.fragments.BrowserButtonsFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools: layout="@layout/fragment_browser_buttons" />
<TextView
<include layout="@layout/fragment_browser_buttons" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/padding"
@ -99,7 +94,7 @@
</LinearLayout>
</ScrollView><ScrollView
</ScrollView><ScrollView
android:id="@+id/p3"
android:layout_width="match_parent"
android:layout_height="match_parent">