2020-01-25 10:25:02 +01:00
|
|
|
package app.fedilab.nitterizeme;
|
|
|
|
/* Copyright 2020 Thomas Schneider
|
|
|
|
*
|
|
|
|
* This file is a part of NitterizeMe
|
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
* NitterizeMe 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 NitterizeMe; if not,
|
|
|
|
* see <http://www.gnu.org/licenses>. */
|
2020-01-25 11:00:55 +01:00
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.SharedPreferences;
|
2020-01-25 15:38:39 +01:00
|
|
|
import android.content.pm.ActivityInfo;
|
|
|
|
import android.content.pm.ApplicationInfo;
|
|
|
|
import android.content.pm.PackageManager;
|
|
|
|
import android.content.pm.ResolveInfo;
|
|
|
|
import android.net.Uri;
|
2020-01-25 10:25:02 +01:00
|
|
|
import android.os.Bundle;
|
|
|
|
|
|
|
|
|
|
|
|
import androidx.appcompat.app.AppCompatActivity;
|
2020-01-28 18:54:19 +01:00
|
|
|
import androidx.appcompat.widget.SwitchCompat;
|
2020-01-25 10:25:02 +01:00
|
|
|
import androidx.appcompat.widget.Toolbar;
|
2020-01-25 15:38:39 +01:00
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
2020-01-25 10:25:02 +01:00
|
|
|
|
|
|
|
import android.view.Menu;
|
|
|
|
import android.view.MenuItem;
|
2020-01-25 11:00:55 +01:00
|
|
|
import android.view.View;
|
|
|
|
import android.widget.Button;
|
|
|
|
|
2020-01-28 18:54:19 +01:00
|
|
|
|
2020-01-25 11:00:55 +01:00
|
|
|
import com.google.android.material.snackbar.Snackbar;
|
|
|
|
import com.google.android.material.textfield.TextInputEditText;
|
|
|
|
|
2020-01-25 15:38:39 +01:00
|
|
|
import java.util.ArrayList;
|
2020-01-25 11:00:55 +01:00
|
|
|
import java.util.Objects;
|
2020-01-25 10:25:02 +01:00
|
|
|
|
|
|
|
public class MainActivity extends AppCompatActivity {
|
|
|
|
|
|
|
|
@SuppressWarnings("unused")
|
|
|
|
public static String TAG = "NitterizeMe";
|
|
|
|
public static String SET_NITTER_HOST = "set_nitter_host";
|
|
|
|
public static String DEFAULT_NITTER_HOST = "nitter.net";
|
|
|
|
public static String SET_INVIDIOUS_HOST = "set_invidious_host";
|
2020-01-25 11:00:55 +01:00
|
|
|
public static String DEFAULT_INVIDIOUS_HOST = "invidio.us";
|
2020-01-28 18:54:19 +01:00
|
|
|
public static String SET_INVIDIOUS_ENABLED = "set_invidious_enabled";
|
|
|
|
public static String SET_NITTER_ENABLED = "set_nitter_enabled";
|
2020-01-29 12:58:26 +01:00
|
|
|
public static String SET_OSM_ENABLED = "set_osm_enabled";
|
2020-02-02 19:12:04 +01:00
|
|
|
public static String SET_OSM_HOST = "set_osm_host";
|
|
|
|
public static String DEFAULT_OSM_HOST = "www.openstreetmap.org";
|
2020-01-25 10:25:02 +01:00
|
|
|
public static final String APP_PREFS = "app_prefs";
|
|
|
|
|
2020-01-25 15:38:39 +01:00
|
|
|
//Supported domains
|
|
|
|
private String[] domains = {
|
|
|
|
"twitter.com",
|
|
|
|
"mobile.twitter.com",
|
|
|
|
"www.twitter.com",
|
|
|
|
"www.youtube.com",
|
|
|
|
"youtube.com",
|
|
|
|
"m.youtube.com",
|
|
|
|
"youtu.be",
|
2020-01-29 12:58:26 +01:00
|
|
|
"youtube-nocookie.com",
|
|
|
|
"google.com/maps",
|
|
|
|
"www.google.com/maps"
|
2020-01-25 15:38:39 +01:00
|
|
|
};
|
|
|
|
|
2020-01-25 10:25:02 +01:00
|
|
|
@Override
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
setContentView(R.layout.activity_main);
|
|
|
|
Toolbar toolbar = findViewById(R.id.toolbar);
|
|
|
|
setSupportActionBar(toolbar);
|
2020-01-25 11:00:55 +01:00
|
|
|
Objects.requireNonNull(getSupportActionBar()).setDisplayShowHomeEnabled(true);
|
|
|
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
|
|
|
|
|
|
SharedPreferences sharedpreferences = getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
|
2020-01-25 10:25:02 +01:00
|
|
|
|
2020-01-25 11:00:55 +01:00
|
|
|
TextInputEditText nitter_instance = findViewById(R.id.nitter_instance);
|
|
|
|
TextInputEditText invidious_instance = findViewById(R.id.invidious_instance);
|
2020-02-02 19:12:04 +01:00
|
|
|
TextInputEditText osm_instance = findViewById(R.id.osm_instance);
|
2020-01-28 18:54:19 +01:00
|
|
|
|
|
|
|
SwitchCompat enable_nitter = findViewById(R.id.enable_nitter);
|
|
|
|
SwitchCompat enable_invidious = findViewById(R.id.enable_invidious);
|
2020-01-29 12:58:26 +01:00
|
|
|
SwitchCompat enable_osm = findViewById(R.id.enable_osm);
|
2020-01-28 18:54:19 +01:00
|
|
|
|
|
|
|
boolean nitter_enabled = sharedpreferences.getBoolean(SET_NITTER_ENABLED, true);
|
|
|
|
boolean invidious_enabled = sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true);
|
2020-01-29 12:58:26 +01:00
|
|
|
boolean osm_enabled = sharedpreferences.getBoolean(SET_OSM_ENABLED, true);
|
2020-01-28 18:54:19 +01:00
|
|
|
|
|
|
|
enable_nitter.setChecked(nitter_enabled);
|
|
|
|
enable_invidious.setChecked(invidious_enabled);
|
2020-01-29 12:58:26 +01:00
|
|
|
enable_osm.setChecked(osm_enabled);
|
2020-01-28 18:54:19 +01:00
|
|
|
|
2020-01-25 11:00:55 +01:00
|
|
|
Button button_save = findViewById(R.id.button_save);
|
2020-01-25 15:38:39 +01:00
|
|
|
RecyclerView list_apps = findViewById(R.id.list_apps);
|
2020-01-25 11:00:55 +01:00
|
|
|
String nitterHost = sharedpreferences.getString(SET_NITTER_HOST, null);
|
|
|
|
String invidiousHost = sharedpreferences.getString(SET_INVIDIOUS_HOST, null);
|
2020-02-02 19:12:04 +01:00
|
|
|
String osmHost = sharedpreferences.getString(SET_OSM_HOST, null);
|
2020-01-28 18:54:19 +01:00
|
|
|
|
|
|
|
enable_invidious.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
|
|
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
|
|
|
editor.putBoolean(SET_INVIDIOUS_ENABLED, isChecked);
|
|
|
|
editor.apply();
|
|
|
|
});
|
|
|
|
enable_nitter.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
|
|
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
|
|
|
editor.putBoolean(SET_NITTER_ENABLED, isChecked);
|
|
|
|
editor.apply();
|
|
|
|
});
|
2020-01-29 12:58:26 +01:00
|
|
|
enable_osm.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
|
|
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
|
|
|
editor.putBoolean(SET_OSM_ENABLED, isChecked);
|
|
|
|
editor.apply();
|
|
|
|
});
|
2020-01-28 18:54:19 +01:00
|
|
|
|
2020-01-25 11:00:55 +01:00
|
|
|
if(nitterHost!=null) {
|
|
|
|
nitter_instance.setText(nitterHost);
|
|
|
|
}
|
|
|
|
if(invidiousHost!=null) {
|
|
|
|
invidious_instance.setText(invidiousHost);
|
|
|
|
}
|
2020-02-02 19:12:04 +01:00
|
|
|
if(osmHost!=null) {
|
|
|
|
osm_instance.setText(osmHost);
|
|
|
|
}
|
2020-01-25 11:00:55 +01:00
|
|
|
button_save.setOnClickListener(v -> {
|
|
|
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
|
|
|
if (nitter_instance.getText() != null && nitter_instance.getText().toString().trim().length() > 0) {
|
|
|
|
editor.putString(SET_NITTER_HOST, nitter_instance.getText().toString().toLowerCase().trim());
|
|
|
|
} else {
|
|
|
|
editor.putString(SET_NITTER_HOST, null);
|
|
|
|
}
|
|
|
|
if (invidious_instance.getText() != null && invidious_instance.getText().toString().trim().length() > 0) {
|
|
|
|
editor.putString(SET_INVIDIOUS_HOST, invidious_instance.getText().toString().toLowerCase().trim());
|
|
|
|
} else {
|
|
|
|
editor.putString(SET_INVIDIOUS_HOST, null);
|
|
|
|
}
|
2020-02-02 19:12:04 +01:00
|
|
|
if (osm_instance.getText() != null && osm_instance.getText().toString().trim().length() > 0) {
|
|
|
|
editor.putString(SET_OSM_HOST, osm_instance.getText().toString().toLowerCase().trim());
|
|
|
|
} else {
|
|
|
|
editor.putString(SET_OSM_HOST, null);
|
|
|
|
}
|
2020-01-25 11:00:55 +01:00
|
|
|
editor.apply();
|
|
|
|
View parentLayout = findViewById(android.R.id.content);
|
|
|
|
Snackbar.make(parentLayout, R.string.instances_saved, Snackbar.LENGTH_LONG).show();
|
|
|
|
});
|
2020-01-25 15:38:39 +01:00
|
|
|
|
|
|
|
ArrayList<AppInfo> appInfos = new ArrayList<>();
|
|
|
|
for(String domain: domains) {
|
|
|
|
AppInfo appInfo = new AppInfo();
|
|
|
|
appInfo.setDomain(domain);
|
|
|
|
appInfo.setApplicationInfo(getDefaultApp("https://"+domain));
|
|
|
|
appInfos.add(appInfo);
|
|
|
|
}
|
|
|
|
|
|
|
|
AppInfoAdapter appInfoAdapter = new AppInfoAdapter(appInfos);
|
|
|
|
list_apps.setAdapter(appInfoAdapter);
|
|
|
|
final LinearLayoutManager mLayoutManager;
|
|
|
|
mLayoutManager = new LinearLayoutManager(MainActivity.this);
|
|
|
|
list_apps.setLayoutManager(mLayoutManager);
|
2020-01-25 16:22:40 +01:00
|
|
|
list_apps.setNestedScrollingEnabled(false);
|
2020-01-25 15:38:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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;
|
2020-01-25 16:22:40 +01:00
|
|
|
if (!activity.name.equals("com.android.internal.app.ResolverActivity") && !activity.packageName.equals("com.huawei.android.internal.app")) {
|
2020-01-25 15:38:39 +01:00
|
|
|
return activity.applicationInfo;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
2020-01-25 10:25:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onCreateOptionsMenu(Menu menu) {
|
|
|
|
// Inflate the menu; this adds items to the action bar if it is present.
|
|
|
|
getMenuInflater().inflate(R.menu.menu_main, menu);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
|
|
// Handle action bar item clicks here. The action bar will
|
|
|
|
// automatically handle clicks on the Home/Up button, so long
|
|
|
|
// as you specify a parent activity in AndroidManifest.xml.
|
|
|
|
int id = item.getItemId();
|
|
|
|
|
|
|
|
//noinspection SimplifiableIfStatement
|
|
|
|
if (id == R.id.action_about) {
|
2020-01-25 11:00:55 +01:00
|
|
|
Intent intent = new Intent(MainActivity.this, AboutActivity.class);
|
|
|
|
startActivity(intent);
|
2020-01-25 10:25:02 +01:00
|
|
|
return true;
|
2020-01-25 11:00:55 +01:00
|
|
|
}else if(id == android.R.id.home){
|
|
|
|
finish();
|
2020-01-25 10:25:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return super.onOptionsItemSelected(item);
|
|
|
|
}
|
|
|
|
}
|