mirror of
https://github.com/TrianguloY/UrlChecker.git
synced 2024-09-19 20:02:16 +02:00
open module app preferences per domain
This commit is contained in:
parent
30d62a1e50
commit
fcca680dee
@ -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());
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user