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

open module app preferences per domain

This commit is contained in:
TrianguloY 2022-08-17 10:44:43 +02:00
parent 30d62a1e50
commit fcca680dee
2 changed files with 49 additions and 49 deletions

View File

@ -178,7 +178,7 @@ class OpenDialog extends AModuleDialog implements View.OnClickListener, PopupMen
} }
// sort // sort
lastOpened.sort(packages); lastOpened.sort(packages, getUrl());
// set // set
btn_open.setText(getActivity().getString(R.string.mOpen_with, PackageUtilities.getPackageName(packages.get(0), getActivity()))); btn_open.setText(getActivity().getString(R.string.mOpen_with, PackageUtilities.getPackageName(packages.get(0), getActivity())));
@ -207,7 +207,7 @@ class OpenDialog extends AModuleDialog implements View.OnClickListener, PopupMen
// update chosen // update chosen
String chosed = packages.get(index); String chosed = packages.get(index);
lastOpened.usedPackage(chosed); lastOpened.usedPackage(chosed, getUrl());
// open // open
Intent intent = new Intent(getActivity().getIntent()); Intent intent = new Intent(getActivity().getIntent());

View File

@ -2,7 +2,9 @@ package com.trianguloy.urlchecker.utilities;
import android.content.Context; import android.content.Context;
import java.util.ArrayList; import java.net.URL;
import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@ -15,72 +17,70 @@ public class LastOpened {
*/ */
private static final int N = 5; private static final int N = 5;
/**
* The preferences
*/
private final List<GenericPref.Str> list = new ArrayList<>(N);
private static final String PREFIX = "opened"; private static final String PREFIX = "opened";
private final Context cntx;
/** /**
* Initializes this utility * Initializes this utility
*
* @param cntx base context
*/ */
public LastOpened(Context cntx) { public LastOpened(Context cntx) {
for (int i = 0; i < N; i++) { this.cntx = cntx;
GenericPref.Str gp = new GenericPref.Str(PREFIX + i, null);
gp.init(cntx);
list.add(gp);
}
// debug // debug
// System.out.println(list); // System.out.println(list);
} }
/** /**
* Sorts an existing list with the last opened * Sorts an existing list of packages in-place with the last opened for a given url
*
* @param packs list to sort
*/ */
public void sort(List<String> packs) { public void sort(List<String> packs, String url) {
// check if a priority app is in the list List<String> priority = getPriority(url).get();
for (int i = 0; i < N; i++) {
final String pack = list.get(i).get(); // sort list based on priority
// and if it is, move to front Collections.sort(packs, (p1, p2) -> Integer.compare(priority.indexOf(p1), priority.indexOf(p2)));
if (packs.contains(pack)) {
packs.remove(pack);
packs.add(0, pack);
}
}
} }
/** /**
* Marks a package as used, updating the priority list * Returns the priority list preferences for a given url.
* * The most preferred is the last.
* @param pack packagename of the used app
*/ */
public void usedPackage(String pack) { private GenericPref.LstStr getPriority(String url) {
// get top level domain and first subdomain (if any)
// check if already the most used, and move all one below String domain;
if (pack.equals(list.get(N - 1).get())) { try {
for (int i = 0; i < N - 3; ++i) { List<String> domainParts = Arrays.asList(new URL(url).getHost().split("\\.", 3));
list.get(i).set(list.get(i + 1).get()); domain = String.join(".", domainParts.size() < 2 ? domainParts : domainParts.subList(0, 2));
} } catch (Exception e) {
list.get(N - 2).set(null); e.printStackTrace();
return; domain = "";
} }
// check intermediate ones, and swap with previous // init list for that domain
for (int i = N - 2; i >= 0; i--) { GenericPref.LstStr pref = new GenericPref.LstStr(PREFIX + domain, ";", Collections.emptyList());
if (pack.equals(list.get(i).get())) { pref.init(cntx);
String prev = list.get(i).get(); return pref;
list.get(i).set(list.get(i + 1).get()); }
list.get(i + 1).set(prev);
return; /**
} * Marks a package as used for a given url, updating the priority list
*/
public void usedPackage(String pack, String url) {
GenericPref<List<String>> pref = getPriority(url);
List<String> priority = pref.get();
// update
int i = priority.indexOf(pack);
if (i >= 0 && i < priority.size()) {
// already present and not most prioritized, shift up
Collections.swap(priority, i, i + 1);
} else if (i == -1) {
// not present, add as last (keep to N max)
while (priority.size() >= N) priority.remove(0);
priority.add(0, pack);
} }
// if not in list, set as last // save
list.get(0).set(pack); pref.set(priority);
} }
} }