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
lastOpened.sort(packages);
lastOpened.sort(packages, getUrl());
// set
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
String chosed = packages.get(index);
lastOpened.usedPackage(chosed);
lastOpened.usedPackage(chosed, getUrl());
// open
Intent intent = new Intent(getActivity().getIntent());

View File

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