2020-04-15 18:19:19 +02:00
|
|
|
package app.fedilab.nitterizeme.activities;
|
|
|
|
/* Copyright 2020 Thomas Schneider
|
|
|
|
*
|
|
|
|
* This file is a part of UntrackMe
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
|
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* UntrackMe is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
|
|
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
|
|
* Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along with UntrackMe; if not,
|
|
|
|
* see <http://www.gnu.org/licenses>. */
|
|
|
|
|
|
|
|
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.pm.ActivityInfo;
|
|
|
|
import android.content.pm.ApplicationInfo;
|
|
|
|
import android.content.pm.PackageManager;
|
|
|
|
import android.content.pm.ResolveInfo;
|
|
|
|
import android.net.Uri;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.view.MenuItem;
|
|
|
|
|
|
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
2020-04-18 18:29:36 +02:00
|
|
|
import java.util.Objects;
|
2020-04-15 18:19:19 +02:00
|
|
|
|
2020-05-04 11:33:58 +02:00
|
|
|
import app.fedilab.nitterizeme.BuildConfig;
|
2020-04-15 18:19:19 +02:00
|
|
|
import app.fedilab.nitterizeme.R;
|
|
|
|
import app.fedilab.nitterizeme.adapters.AppInfoAdapter;
|
|
|
|
import app.fedilab.nitterizeme.entities.AppInfo;
|
|
|
|
|
|
|
|
|
|
|
|
public class CheckAppActivity extends AppCompatActivity {
|
|
|
|
|
|
|
|
|
|
|
|
//Supported domains
|
|
|
|
public static String[] twitter_domains = {
|
|
|
|
"twitter.com",
|
|
|
|
"mobile.twitter.com",
|
|
|
|
"www.twitter.com",
|
|
|
|
"pbs.twimg.com",
|
|
|
|
"pic.twitter.com"
|
|
|
|
};
|
|
|
|
public static String[] instagram_domains = {
|
|
|
|
"instagram.com",
|
|
|
|
"www.instagram.com",
|
|
|
|
"m.instagram.com",
|
|
|
|
};
|
|
|
|
public static String[] youtube_domains = {
|
|
|
|
"www.youtube.com",
|
|
|
|
"youtube.com",
|
|
|
|
"m.youtube.com",
|
|
|
|
"youtu.be",
|
|
|
|
"youtube-nocookie.com"
|
|
|
|
};
|
|
|
|
public static String[] shortener_domains = {
|
|
|
|
"t.co",
|
|
|
|
"nyti.ms",
|
|
|
|
"bit.ly",
|
2020-10-04 13:49:40 +02:00
|
|
|
"amp.gs",
|
2020-04-15 18:19:19 +02:00
|
|
|
"tinyurl.com",
|
|
|
|
"goo.gl",
|
2020-11-11 15:51:11 +01:00
|
|
|
"nzzl.us",
|
|
|
|
"ift.tt",
|
2020-04-15 18:19:19 +02:00
|
|
|
"ow.ly",
|
|
|
|
"bl.ink",
|
2020-05-23 10:46:44 +02:00
|
|
|
"buff.ly",
|
|
|
|
"maps.app.goo.gl"
|
2020-04-15 18:19:19 +02:00
|
|
|
};
|
|
|
|
//Supported instances to redirect one instance to another faster for the user
|
|
|
|
public static String[] invidious_instances = {
|
|
|
|
"invidio.us",
|
|
|
|
"invidious.snopyta.org",
|
|
|
|
"invidiou.sh",
|
|
|
|
"invidious.toot.koeln",
|
|
|
|
"invidious.ggc-project.de",
|
|
|
|
"invidious.13ad.de",
|
|
|
|
"yewtu.be"
|
|
|
|
};
|
|
|
|
public static String[] nitter_instances = {
|
|
|
|
"nitter.net",
|
|
|
|
"nitter.snopyta.org",
|
|
|
|
"nitter.42l.fr",
|
|
|
|
"nitter.13ad.de",
|
|
|
|
"tw.openalgeria.org",
|
|
|
|
"nitter.pussthecat.org",
|
|
|
|
"nitter.mastodont.cat",
|
|
|
|
"nitter.dark.fail",
|
|
|
|
"nitter.tedomum.net"
|
|
|
|
};
|
|
|
|
public static String[] bibliogram_instances = {
|
|
|
|
"bibliogram.art",
|
|
|
|
"bibliogram.snopyta.org",
|
|
|
|
"bibliogram.dsrev.ru",
|
|
|
|
"bibliogram.pussthecat.org"
|
|
|
|
};
|
2020-07-10 14:06:14 +02:00
|
|
|
|
|
|
|
public static String outlook_safe_domain = "safelinks.protection.outlook.com";
|
|
|
|
|
2020-04-15 18:19:19 +02:00
|
|
|
private RecyclerView list_apps;
|
|
|
|
private String[] domains;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
setContentView(R.layout.activity_check_app);
|
|
|
|
|
|
|
|
|
|
|
|
setTitle(R.string.check_apps);
|
|
|
|
if (getSupportActionBar() != null) {
|
|
|
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
|
|
getSupportActionBar().setDisplayShowHomeEnabled(true);
|
|
|
|
}
|
2020-05-04 17:27:41 +02:00
|
|
|
if (BuildConfig.fullLinks) {
|
2020-05-04 11:33:58 +02:00
|
|
|
domains = new String[twitter_domains.length + youtube_domains.length + shortener_domains.length + instagram_domains.length + invidious_instances.length + nitter_instances.length + bibliogram_instances.length];
|
|
|
|
} else {
|
|
|
|
domains = new String[twitter_domains.length + youtube_domains.length + shortener_domains.length + instagram_domains.length];
|
|
|
|
}
|
2020-04-15 18:19:19 +02:00
|
|
|
int i = 0;
|
|
|
|
for (String host : twitter_domains) {
|
|
|
|
domains[i] = host;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
for (String host : youtube_domains) {
|
|
|
|
domains[i] = host;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
for (String host : instagram_domains) {
|
|
|
|
domains[i] = host;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
for (String host : shortener_domains) {
|
|
|
|
domains[i] = host;
|
|
|
|
i++;
|
|
|
|
}
|
2020-05-04 17:27:41 +02:00
|
|
|
if (BuildConfig.fullLinks) {
|
2020-05-04 11:33:58 +02:00
|
|
|
for (String host : invidious_instances) {
|
|
|
|
domains[i] = host;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
for (String host : nitter_instances) {
|
|
|
|
domains[i] = host;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
for (String host : bibliogram_instances) {
|
|
|
|
domains[i] = host;
|
|
|
|
i++;
|
|
|
|
}
|
2020-04-15 18:19:19 +02:00
|
|
|
}
|
|
|
|
list_apps = findViewById(R.id.list_apps);
|
|
|
|
|
|
|
|
final LinearLayoutManager mLayoutManager;
|
|
|
|
mLayoutManager = new LinearLayoutManager(CheckAppActivity.this);
|
|
|
|
list_apps.setLayoutManager(mLayoutManager);
|
|
|
|
list_apps.setNestedScrollingEnabled(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onResume() {
|
|
|
|
super.onResume();
|
|
|
|
if (list_apps != null) {
|
2020-04-18 18:29:36 +02:00
|
|
|
int position = ((LinearLayoutManager) Objects.requireNonNull(list_apps.getLayoutManager()))
|
|
|
|
.findFirstVisibleItemPosition();
|
2020-04-15 18:19:19 +02:00
|
|
|
ArrayList<AppInfo> appInfos = getAppInfo();
|
|
|
|
AppInfoAdapter appInfoAdapter = new AppInfoAdapter(appInfos);
|
|
|
|
list_apps.setAdapter(appInfoAdapter);
|
2020-04-18 18:29:36 +02:00
|
|
|
list_apps.scrollToPosition(position);
|
2020-04-15 18:19:19 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
|
|
if (item.getItemId() == android.R.id.home) {
|
|
|
|
finish();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return super.onOptionsItemSelected(item);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allow to get info about application that opens the link by default
|
|
|
|
*
|
|
|
|
* @param url String url for test
|
|
|
|
* @return ApplicationInfo info about the application
|
|
|
|
*/
|
|
|
|
ApplicationInfo getDefaultApp(String url) {
|
|
|
|
final Intent browserIntent = new Intent(Intent.ACTION_VIEW);
|
|
|
|
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
browserIntent.setData(Uri.parse(url));
|
|
|
|
final ResolveInfo defaultResolution = getPackageManager().resolveActivity(browserIntent, PackageManager.MATCH_DEFAULT_ONLY);
|
|
|
|
if (defaultResolution != null) {
|
|
|
|
final ActivityInfo activity = defaultResolution.activityInfo;
|
|
|
|
if (!activity.name.equals("com.android.internal.app.ResolverActivity") && !activity.packageName.equals("com.huawei.android.internal.app")) {
|
|
|
|
return activity.applicationInfo;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private ArrayList<AppInfo> getAppInfo() {
|
|
|
|
ArrayList<AppInfo> appInfos = new ArrayList<>();
|
|
|
|
int j = 0;
|
|
|
|
for (String domain : domains) {
|
|
|
|
if (j == 0) {
|
|
|
|
AppInfo appInfo = new AppInfo();
|
|
|
|
appInfo.setTitle("Twitter");
|
|
|
|
appInfos.add(appInfo);
|
|
|
|
} else if (j == twitter_domains.length) {
|
|
|
|
AppInfo appInfo = new AppInfo();
|
|
|
|
appInfo.setTitle("YouTube");
|
|
|
|
appInfos.add(appInfo);
|
|
|
|
} else if (j == twitter_domains.length + youtube_domains.length) {
|
|
|
|
AppInfo appInfo = new AppInfo();
|
|
|
|
appInfo.setTitle("Instagram");
|
|
|
|
appInfos.add(appInfo);
|
|
|
|
} else if (j == twitter_domains.length + youtube_domains.length + instagram_domains.length) {
|
|
|
|
AppInfo appInfo = new AppInfo();
|
|
|
|
appInfo.setTitle(getString(R.string.shortener_services));
|
|
|
|
appInfos.add(appInfo);
|
|
|
|
} else if (j == twitter_domains.length + youtube_domains.length + instagram_domains.length + shortener_domains.length) {
|
|
|
|
AppInfo appInfo = new AppInfo();
|
|
|
|
appInfo.setTitle(getString(R.string.invidious_instances));
|
|
|
|
appInfos.add(appInfo);
|
|
|
|
} else if (j == twitter_domains.length + youtube_domains.length + instagram_domains.length + shortener_domains.length + invidious_instances.length) {
|
|
|
|
AppInfo appInfo = new AppInfo();
|
|
|
|
appInfo.setTitle(getString(R.string.nitter_instances));
|
|
|
|
appInfos.add(appInfo);
|
|
|
|
} else if (j == twitter_domains.length + youtube_domains.length + instagram_domains.length + shortener_domains.length + invidious_instances.length + nitter_instances.length) {
|
|
|
|
AppInfo appInfo = new AppInfo();
|
|
|
|
appInfo.setTitle(getString(R.string.bibliogram_instances));
|
|
|
|
appInfos.add(appInfo);
|
|
|
|
}
|
|
|
|
AppInfo appInfo = new AppInfo();
|
|
|
|
appInfo.setDomain(domain);
|
|
|
|
appInfo.setApplicationInfo(getDefaultApp("https://" + domain + "/"));
|
|
|
|
appInfos.add(appInfo);
|
|
|
|
j++;
|
|
|
|
}
|
|
|
|
return appInfos;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|