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:
parent
30d62a1e50
commit
fcca680dee
@ -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());
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user