diff --git a/app/src/androidTest/java/app/fedilab/nitterizeme/ExampleInstrumentedTest.java b/app/src/androidTest/java/app/fedilab/nitterizeme/ExampleInstrumentedTest.java index 93c3af2..7afb1f9 100644 --- a/app/src/androidTest/java/app/fedilab/nitterizeme/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/app/fedilab/nitterizeme/ExampleInstrumentedTest.java @@ -2,13 +2,13 @@ package app.fedilab.nitterizeme; import android.content.Context; -import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Instrumented test, which will execute on an Android device. diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 14eba37..9f3afea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + + android:noHistory="true" + android:theme="@style/Theme.AppCompat.Translucent"> + - - + + android:pathPattern=".*" + android:scheme="http" /> - - + + + - - + + android:pathPattern=".*" + android:scheme="http" /> - - + + + - - + + android:pathPattern=".*" + android:scheme="http" /> - - + + + - - + + android:pathPattern=".*" + android:scheme="http" /> - - + + + - - + + android:pathPattern=".*" + android:scheme="http" /> - - + + + - - + + android:pathPattern=".*" + android:scheme="http" /> - - + + + - - + + android:pathPattern=".*" + android:scheme="http" /> - - + + + - - + + android:pathPattern=".*" + android:scheme="http" /> - + + android:host="twitter.com" + android:mimeType="text/plain" /> + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + android:scheme="http" /> - - + + + android:label="@string/app_name" + android:theme="@style/AppTheme" /> \ No newline at end of file diff --git a/app/src/main/java/app/fedilab/nitterizeme/AboutActivity.java b/app/src/main/java/app/fedilab/nitterizeme/AboutActivity.java index 312a2fc..fcc766a 100644 --- a/app/src/main/java/app/fedilab/nitterizeme/AboutActivity.java +++ b/app/src/main/java/app/fedilab/nitterizeme/AboutActivity.java @@ -30,11 +30,9 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; - public class AboutActivity extends AppCompatActivity { - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -45,17 +43,18 @@ public class AboutActivity extends AppCompatActivity { PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); String version = pInfo.versionName; about_version.setText(getResources().getString(R.string.about_vesrion, version)); - } catch (PackageManager.NameNotFoundException ignored) {} + } catch (PackageManager.NameNotFoundException ignored) { + } setTitle(R.string.about_the_app); - if( getSupportActionBar() != null) { + if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } //Developer click for Mastodon account TextView developer_mastodon = findViewById(R.id.developer_mastodon); SpannableString content = new SpannableString(developer_mastodon.getText().toString()); - content.setSpan(new ForegroundColorSpan(ContextCompat.getColor(AboutActivity.this,R.color.colorAccent)), 0, content.length(), 0); + content.setSpan(new ForegroundColorSpan(ContextCompat.getColor(AboutActivity.this, R.color.colorAccent)), 0, content.length(), 0); developer_mastodon.setText(content); developer_mastodon.setOnClickListener(v -> { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://toot.fedilab.app/@fedilab")); @@ -112,7 +111,7 @@ public class AboutActivity extends AppCompatActivity { TextView license = findViewById(R.id.license); content = new SpannableString(license.getText().toString()); - content.setSpan(new ForegroundColorSpan(ContextCompat.getColor(AboutActivity.this,R.color.colorAccent)), 0, content.length(), 0); + content.setSpan(new ForegroundColorSpan(ContextCompat.getColor(AboutActivity.this, R.color.colorAccent)), 0, content.length(), 0); content.setSpan(new UnderlineSpan(), 0, content.length(), 0); license.setText(content); license.setOnClickListener(v -> { diff --git a/app/src/main/java/app/fedilab/nitterizeme/AppInfoAdapter.java b/app/src/main/java/app/fedilab/nitterizeme/AppInfoAdapter.java index 651d55a..4495b6e 100644 --- a/app/src/main/java/app/fedilab/nitterizeme/AppInfoAdapter.java +++ b/app/src/main/java/app/fedilab/nitterizeme/AppInfoAdapter.java @@ -27,7 +27,6 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; - import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; @@ -57,7 +56,7 @@ public class AppInfoAdapter extends RecyclerView.Adapter { AppInfo appInfo = appInfos.get(viewHolder.getAdapterPosition()); Context context = holder.itemView.getContext(); holder.domain.setText(appInfo.getDomain()); - if( appInfo.getApplicationInfo() != null ) { + if (appInfo.getApplicationInfo() != null) { Drawable icon = appInfo.getApplicationInfo().loadIcon(context.getPackageManager()); try { holder.app_icon.setImageDrawable(icon); @@ -65,10 +64,10 @@ public class AppInfoAdapter extends RecyclerView.Adapter { holder.app_icon.setImageResource(R.drawable.ic_android); } holder.information.setText(appInfo.getApplicationInfo().packageName); - if( appInfo.getApplicationInfo().packageName.compareTo(BuildConfig.APPLICATION_ID) == 0 ) { + if (appInfo.getApplicationInfo().packageName.compareTo(BuildConfig.APPLICATION_ID) == 0) { holder.valid.setImageResource(R.drawable.ic_check); holder.valid.setContentDescription(context.getString(R.string.valid)); - }else { + } else { holder.valid.setImageResource(R.drawable.ic_error); holder.valid.setContentDescription(context.getString(R.string.error)); } @@ -78,7 +77,7 @@ public class AppInfoAdapter extends RecyclerView.Adapter { intent.setData(uri); context.startActivity(intent); }); - }else{ + } else { holder.information.setText(R.string.no_apps); holder.app_icon.setImageResource(R.drawable.ic_android); holder.valid.setContentDescription(context.getString(R.string.warning)); @@ -86,8 +85,8 @@ public class AppInfoAdapter extends RecyclerView.Adapter { holder.main_container.setOnClickListener(v -> { Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra("nitterizeme","test"); - String url = "https://"+appInfo.getDomain(); + intent.putExtra("nitterizeme", "test"); + String url = "https://" + appInfo.getDomain(); intent.setData(Uri.parse(url)); context.startActivity(intent); }); diff --git a/app/src/main/java/app/fedilab/nitterizeme/MainActivity.java b/app/src/main/java/app/fedilab/nitterizeme/MainActivity.java index 396c2a3..8945698 100644 --- a/app/src/main/java/app/fedilab/nitterizeme/MainActivity.java +++ b/app/src/main/java/app/fedilab/nitterizeme/MainActivity.java @@ -13,6 +13,7 @@ package app.fedilab.nitterizeme; * * You should have received a copy of the GNU General Public License along with NitterizeMe; if not, * see . */ + import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -22,14 +23,6 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Bundle; - - -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.SwitchCompat; -import androidx.appcompat.widget.Toolbar; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - import android.provider.Settings; import android.view.Menu; import android.view.MenuItem; @@ -39,43 +32,40 @@ import android.widget.CheckBox; import android.widget.ImageButton; import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.SwitchCompat; +import androidx.appcompat.widget.Toolbar; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.snackbar.Snackbar; import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputLayout; import java.util.ArrayList; -import java.util.Arrays; import java.util.Objects; public class MainActivity extends AppCompatActivity { + public static final String APP_PREFS = "app_prefs"; @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"; - public static String DEFAULT_INVIDIOUS_HOST = "invidio.us"; - public static String SET_INVIDIOUS_ENABLED = "set_invidious_enabled"; - public static String SET_NITTER_ENABLED = "set_nitter_enabled"; - public static String SET_OSM_ENABLED = "set_osm_enabled"; - public static String SET_OSM_HOST = "set_osm_host"; - public static String DEFAULT_OSM_HOST = "www.openstreetmap.org"; - public static String SET_GEO_URIS = "set_geo_uris"; - public static final String APP_PREFS = "app_prefs"; - private AppInfoAdapter appInfoAdapter; - private RecyclerView list_apps; - - - private String[] domains; - + 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"; + public static String DEFAULT_INVIDIOUS_HOST = "invidio.us"; + public static String SET_INVIDIOUS_ENABLED = "set_invidious_enabled"; + public static String SET_NITTER_ENABLED = "set_nitter_enabled"; + public static String SET_OSM_ENABLED = "set_osm_enabled"; + public static String SET_OSM_HOST = "set_osm_host"; + public static String DEFAULT_OSM_HOST = "www.openstreetmap.org"; + public static String SET_GEO_URIS = "set_geo_uris"; //Supported domains public static String[] twitter_domains = { "twitter.com", "mobile.twitter.com", "www.twitter.com", }; - public static String[] youtube_domains = { "www.youtube.com", "youtube.com", @@ -83,7 +73,6 @@ public class MainActivity extends AppCompatActivity { "youtu.be", "youtube-nocookie.com" }; - public static String[] shortener_domains = { "t.co", "nyti.ms", @@ -91,6 +80,9 @@ public class MainActivity extends AppCompatActivity { "tinyurl.com", "goo.gl", }; + private AppInfoAdapter appInfoAdapter; + private RecyclerView list_apps; + private String[] domains; @Override protected void onCreate(Bundle savedInstanceState) { @@ -101,17 +93,17 @@ public class MainActivity extends AppCompatActivity { Objects.requireNonNull(getSupportActionBar()).setDisplayShowHomeEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - domains = new String[twitter_domains.length+youtube_domains.length+shortener_domains.length]; + domains = new String[twitter_domains.length + youtube_domains.length + shortener_domains.length]; int i = 0; - for(String host: twitter_domains){ + for (String host : twitter_domains) { domains[i] = host; i++; } - for(String host: youtube_domains){ + for (String host : youtube_domains) { domains[i] = host; i++; } - for(String host: shortener_domains){ + for (String host : shortener_domains) { domains[i] = host; i++; } @@ -156,13 +148,13 @@ public class MainActivity extends AppCompatActivity { editor.apply(); }); - if(nitterHost!=null) { + if (nitterHost != null) { nitter_instance.setText(nitterHost); } - if(invidiousHost!=null) { + if (invidiousHost != null) { invidious_instance.setText(invidiousHost); } - if(osmHost!=null) { + if (osmHost != null) { osm_instance.setText(osmHost); } button_save.setOnClickListener(v -> { @@ -197,20 +189,20 @@ public class MainActivity extends AppCompatActivity { ImageButton buttonExpand = findViewById(R.id.button_expand); buttonExpand.setOnClickListener(v -> { - if( list_apps.getVisibility() == View.VISIBLE){ + if (list_apps.getVisibility() == View.VISIBLE) { list_apps.setVisibility(View.GONE); buttonExpand.setContentDescription(getString(R.string.display_supported_links)); - }else{ + } else { list_apps.setVisibility(View.VISIBLE); buttonExpand.setContentDescription(getString(R.string.hide_supported_links)); } }); ArrayList appInfos = new ArrayList<>(); - for(String domain: domains) { + for (String domain : domains) { AppInfo appInfo = new AppInfo(); appInfo.setDomain(domain); - appInfo.setApplicationInfo(getDefaultApp("https://"+domain)); + appInfo.setApplicationInfo(getDefaultApp("https://" + domain)); appInfos.add(appInfo); } @@ -221,10 +213,10 @@ public class MainActivity extends AppCompatActivity { editor.apply(); TextInputLayout osm_instance_container = findViewById(R.id.osm_instance_container); TextView osm_indications = findViewById(R.id.osm_indications); - if( isChecked){ + if (isChecked) { osm_instance_container.setVisibility(View.GONE); osm_indications.setText(R.string.redirect_gm_to_geo_uri); - }else{ + } else { osm_instance_container.setVisibility(View.VISIBLE); osm_indications.setText(R.string.redirect_gm_to_osm); } @@ -241,6 +233,7 @@ public class MainActivity extends AppCompatActivity { /** * Allow to get info about application that opens the link by default + * * @param url String url for test * @return ApplicationInfo info about the application */ @@ -277,7 +270,7 @@ public class MainActivity extends AppCompatActivity { Intent intent = new Intent(MainActivity.this, AboutActivity.class); startActivity(intent); return true; - }else if(id == android.R.id.home){ + } else if (id == android.R.id.home) { finish(); } @@ -285,14 +278,14 @@ public class MainActivity extends AppCompatActivity { } @Override - protected void onResume(){ + protected void onResume() { super.onResume(); - if( list_apps != null) { + if (list_apps != null) { ArrayList appInfos = new ArrayList<>(); - for(String domain: domains) { + for (String domain : domains) { AppInfo appInfo = new AppInfo(); appInfo.setDomain(domain); - appInfo.setApplicationInfo(getDefaultApp("https://"+domain)); + appInfo.setApplicationInfo(getDefaultApp("https://" + domain)); appInfos.add(appInfo); } appInfoAdapter = new AppInfoAdapter(appInfos); diff --git a/app/src/main/java/app/fedilab/nitterizeme/TransformActivity.java b/app/src/main/java/app/fedilab/nitterizeme/TransformActivity.java index 8d3cbcc..5eb7ff6 100644 --- a/app/src/main/java/app/fedilab/nitterizeme/TransformActivity.java +++ b/app/src/main/java/app/fedilab/nitterizeme/TransformActivity.java @@ -13,6 +13,7 @@ package app.fedilab.nitterizeme; * * You should have received a copy of the GNU General Public License along with NitterizeMe; if not, * see . */ + import android.app.Activity; import android.content.ComponentName; import android.content.Context; @@ -32,7 +33,6 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; - import androidx.appcompat.app.AlertDialog; import java.net.MalformedURLException; @@ -54,27 +54,28 @@ import static app.fedilab.nitterizeme.MainActivity.youtube_domains; public class TransformActivity extends Activity { - private Thread thread; - private ArrayList notShortnedURLDialog; final Pattern youtubePattern = Pattern.compile("(www\\.|m\\.)?(youtube\\.com|youtu\\.be|youtube-nocookie\\.com)/(((?!([\"'<])).)*)"); final Pattern nitterPattern = Pattern.compile("(mobile\\.|www\\.)?twitter.com([\\w-/]+)"); final Pattern maps = Pattern.compile("/maps/place/[^@]+@([\\d.,z]{3,}).*"); - final Pattern extractPlace = Pattern.compile("/maps/place/(((?!/data).)*)"); + final Pattern extractPlace = Pattern.compile("/maps/place/(((?!/data).)*)"); + private Thread thread; + private ArrayList notShortnedURLDialog; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences sharedpreferences = getSharedPreferences(MainActivity.APP_PREFS, Context.MODE_PRIVATE); Intent intent = getIntent(); - if( intent != null && intent.getStringExtra("nitterizeme") != null ) { + if (intent != null && intent.getStringExtra("nitterizeme") != null) { finish(); return; } notShortnedURLDialog = new ArrayList<>(); assert intent != null; //Dealing with URLs - if( Objects.requireNonNull(intent.getAction()).equals(Intent.ACTION_VIEW)){ + if (Objects.requireNonNull(intent.getAction()).equals(Intent.ACTION_VIEW)) { - String url = Objects.requireNonNull(intent.getData()).toString(); + String url = Objects.requireNonNull(intent.getData()).toString(); URL url_; String host = null; try { @@ -84,7 +85,7 @@ public class TransformActivity extends Activity { e.printStackTrace(); } //Shortened URLs - if( Arrays.asList(shortener_domains).contains(host)) { + if (Arrays.asList(shortener_domains).contains(host)) { AlertDialog.Builder unshortenAlertBuilder = new AlertDialog.Builder(TransformActivity.this); unshortenAlertBuilder.setTitle(R.string.shortened_detected); @@ -92,27 +93,27 @@ public class TransformActivity extends Activity { unshortenAlertBuilder.setView(view); unshortenAlertBuilder.setIcon(R.mipmap.ic_launcher); unshortenAlertBuilder.setPositiveButton(R.string.open, (dialog, id) -> { - if( notShortnedURLDialog.size() > 0){ + if (notShortnedURLDialog.size() > 0) { URL url_1; String realHost = null; try { - url_1 = new URL(notShortnedURLDialog.get(notShortnedURLDialog.size()-1)); + url_1 = new URL(notShortnedURLDialog.get(notShortnedURLDialog.size() - 1)); realHost = url_1.getHost(); } catch (MalformedURLException e) { e.printStackTrace(); } - if( Arrays.asList(twitter_domains).contains(realHost)) { + if (Arrays.asList(twitter_domains).contains(realHost)) { boolean nitter_enabled = sharedpreferences.getBoolean(SET_NITTER_ENABLED, true); - if(nitter_enabled) { + if (nitter_enabled) { Intent delegate = new Intent(Intent.ACTION_VIEW); String transformedURL = transformUrl(url); - if( transformedURL != null) { + if (transformedURL != null) { delegate.setData(Uri.parse(transformUrl(url))); delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (delegate.resolveActivity(getPackageManager()) != null) { startActivity(delegate); } - }else{ + } else { forwardToBrowser(intent); } } else { @@ -120,18 +121,18 @@ public class TransformActivity extends Activity { } } //Maps URLs (containing /maps/place like Google Maps links) - else if( url.contains("/maps/place")) { + else if (url.contains("/maps/place")) { boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true); - if(osm_enabled) { + if (osm_enabled) { Intent delegate = new Intent(Intent.ACTION_VIEW); String transformedURL = transformUrl(url); - if( transformedURL != null) { + if (transformedURL != null) { delegate.setData(Uri.parse(transformUrl(url))); delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (delegate.resolveActivity(getPackageManager()) != null) { startActivity(delegate); } - }else { + } else { forwardToBrowser(intent); } } else { @@ -139,26 +140,26 @@ public class TransformActivity extends Activity { } } //YouTube URLs - else if(Arrays.asList(youtube_domains).contains(realHost)){ //Youtube URL + else if (Arrays.asList(youtube_domains).contains(realHost)) { //Youtube URL boolean invidious_enabled = sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true); - if( invidious_enabled) { + if (invidious_enabled) { Intent delegate = new Intent(Intent.ACTION_VIEW); String transformedURL = transformUrl(url); - if( transformedURL != null) { + if (transformedURL != null) { delegate.setData(Uri.parse(transformUrl(url))); delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (delegate.resolveActivity(getPackageManager()) != null) { startActivity(delegate); } - }else { + } else { forwardToBrowser(intent); } - }else{ + } else { forwardToBrowser(intent); } - }else { + } else { Intent delegate = new Intent(Intent.ACTION_VIEW); - delegate.setData(Uri.parse(notShortnedURLDialog.get(notShortnedURLDialog.size()-1))); + delegate.setData(Uri.parse(notShortnedURLDialog.get(notShortnedURLDialog.size() - 1))); delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (delegate.resolveActivity(getPackageManager()) != null) { startActivity(delegate); @@ -186,12 +187,12 @@ public class TransformActivity extends Activity { Runnable myRunnable = () -> { positiveButton.setEnabled(true); StringBuilder message; - if( notShortnedURLDialog.size() <= 1 ) { + if (notShortnedURLDialog.size() <= 1) { message = new StringBuilder(getString(R.string.the_app_failed_shortened)); - }else { + } else { message = new StringBuilder(getString(R.string.try_to_redirect, notShortnedURLDialog.get(0), notShortnedURLDialog.get(1))); - if( notShortnedURLDialog.size() > 2 ){ - for(int i=2 ; i < notShortnedURLDialog.size(); i++){ + if (notShortnedURLDialog.size() > 2) { + for (int i = 2; i < notShortnedURLDialog.size(); i++) { message.append("\n\n").append(getString(R.string.try_to_redirect_again, notShortnedURLDialog.get(i))); } } @@ -208,18 +209,18 @@ public class TransformActivity extends Activity { thread.start(); } //Twitter URLs - else if( Arrays.asList(twitter_domains).contains(host)) { + else if (Arrays.asList(twitter_domains).contains(host)) { boolean nitter_enabled = sharedpreferences.getBoolean(SET_NITTER_ENABLED, true); - if(nitter_enabled) { + if (nitter_enabled) { Intent delegate = new Intent(Intent.ACTION_VIEW); String transformedURL = transformUrl(url); - if( transformedURL != null) { + if (transformedURL != null) { delegate.setData(Uri.parse(transformUrl(url))); delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (delegate.resolveActivity(getPackageManager()) != null) { startActivity(delegate); } - }else{ + } else { forwardToBrowser(intent); } } else { @@ -227,18 +228,18 @@ public class TransformActivity extends Activity { } } //Maps URLs (containing /maps/place like Google Maps links) - else if( url.contains("/maps/place")) { + else if (url.contains("/maps/place")) { boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true); - if(osm_enabled) { + if (osm_enabled) { Intent delegate = new Intent(Intent.ACTION_VIEW); String transformedURL = transformUrl(url); - if( transformedURL != null) { + if (transformedURL != null) { delegate.setData(Uri.parse(transformUrl(url))); delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (delegate.resolveActivity(getPackageManager()) != null) { startActivity(delegate); } - }else { + } else { forwardToBrowser(intent); } } else { @@ -246,35 +247,35 @@ public class TransformActivity extends Activity { } } //YouTube URLs - else if(Arrays.asList(youtube_domains).contains(host)){ //Youtube URL + else if (Arrays.asList(youtube_domains).contains(host)) { //Youtube URL boolean invidious_enabled = sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true); - if( invidious_enabled) { + if (invidious_enabled) { Intent delegate = new Intent(Intent.ACTION_VIEW); String transformedURL = transformUrl(url); - if( transformedURL != null) { + if (transformedURL != null) { delegate.setData(Uri.parse(transformUrl(url))); delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (delegate.resolveActivity(getPackageManager()) != null) { startActivity(delegate); } - }else { + } else { forwardToBrowser(intent); } - }else{ + } else { forwardToBrowser(intent); } } } //It's a sharing intent - else if( Objects.requireNonNull(intent.getAction()).equals(Intent.ACTION_SEND)){ + else if (Objects.requireNonNull(intent.getAction()).equals(Intent.ACTION_SEND)) { share(intent.getStringExtra(Intent.EXTRA_TEXT)); } } @Override - protected void onDestroy(){ - if( thread != null && thread.isAlive()){ + protected void onDestroy() { + if (thread != null && thread.isAlive()) { thread.interrupt(); } super.onDestroy(); @@ -282,6 +283,7 @@ public class TransformActivity extends Activity { /** * Forward the intent to a browser + * * @param i original intent */ private void forwardToBrowser(Intent i) { @@ -314,6 +316,7 @@ public class TransformActivity extends Activity { /** * Transform the URL to a Nitter, Invidious or OSM ones + * * @param url String original URL * @return String transformed URL */ @@ -329,9 +332,9 @@ public class TransformActivity extends Activity { } catch (MalformedURLException e) { e.printStackTrace(); } - if(Arrays.asList(twitter_domains).contains(host)) { + if (Arrays.asList(twitter_domains).contains(host)) { boolean nitter_enabled = sharedpreferences.getBoolean(SET_NITTER_ENABLED, true); - if(nitter_enabled) { + if (nitter_enabled) { Matcher matcher = nitterPattern.matcher(url); while (matcher.find()) { final String nitter_directory = matcher.group(2); @@ -342,46 +345,46 @@ public class TransformActivity extends Activity { } else { return url; } - }else if( url.contains("/maps/place")) { + } else if (url.contains("/maps/place")) { boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true); - if(osm_enabled) { + if (osm_enabled) { Matcher matcher = maps.matcher(url); while (matcher.find()) { final String localization = matcher.group(1); assert localization != null; String[] data = localization.split(","); - if( data.length > 2 ){ + if (data.length > 2) { String zoom; String[] details = data[2].split("\\."); - if( details.length > 0 ) { + if (details.length > 0) { zoom = details[0]; - }else { + } else { zoom = data[2]; } String osmHost = sharedpreferences.getString(MainActivity.SET_OSM_HOST, MainActivity.DEFAULT_OSM_HOST).toLowerCase(); boolean geo_uri_enabled = sharedpreferences.getBoolean(MainActivity.SET_GEO_URIS, false); - if(! geo_uri_enabled) { + if (!geo_uri_enabled) { newUrl = "https://" + osmHost + "/#map=" + zoom + "/" + data[0] + "/" + data[1]; - }else{ - newUrl = "geo:0,0?q="+data[0]+","+data[1]+",z="+zoom; + } else { + newUrl = "geo:0,0?q=" + data[0] + "," + data[1] + ",z=" + zoom; } } } - if( newUrl == null && url.contains("/data=")) { + if (newUrl == null && url.contains("/data=")) { matcher = extractPlace.matcher(url); while (matcher.find()) { final String search = matcher.group(1); - newUrl = "geo:0,0?q="+search; + newUrl = "geo:0,0?q=" + search; } } return newUrl; } else { return url; } - }else if(Arrays.asList(youtube_domains).contains(host)){ //Youtube URL + } else if (Arrays.asList(youtube_domains).contains(host)) { //Youtube URL boolean invidious_enabled = sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true); - if( invidious_enabled) { + if (invidious_enabled) { Matcher matcher = youtubePattern.matcher(url); while (matcher.find()) { final String youtubeId = matcher.group(3); @@ -393,7 +396,7 @@ public class TransformActivity extends Activity { } } return newUrl; - }else{ + } else { return url; } } @@ -403,6 +406,7 @@ public class TransformActivity extends Activity { /** * Transform URL inside the shared content without modifying the whole content + * * @param extraText String the new extra text */ private void share(String extraText) { @@ -432,7 +436,7 @@ public class TransformActivity extends Activity { e.printStackTrace(); } String newUrl = null; - if( url == null){ + if (url == null) { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, extraText); @@ -441,9 +445,9 @@ public class TransformActivity extends Activity { return; } - if( Arrays.asList(twitter_domains).contains(host) ) { + if (Arrays.asList(twitter_domains).contains(host)) { boolean nitter_enabled = sharedpreferences.getBoolean(SET_NITTER_ENABLED, true); - if(nitter_enabled) { + if (nitter_enabled) { Matcher matcher = nitterPattern.matcher(url); while (matcher.find()) { final String nitter_directory = matcher.group(2); @@ -451,30 +455,30 @@ public class TransformActivity extends Activity { newUrl = "https://" + nitterHost + nitter_directory; } } - }else if( url.contains("/maps/place/")) { + } else if (url.contains("/maps/place/")) { boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true); - if(osm_enabled) { + if (osm_enabled) { Matcher matcher = maps.matcher(url); while (matcher.find()) { final String localization = matcher.group(1); assert localization != null; String[] data = localization.split(","); - if( data.length > 2 ){ + if (data.length > 2) { String zoom; String[] details = data[2].split("\\."); - if( details.length > 0 ) { + if (details.length > 0) { zoom = details[0]; - }else { + } else { zoom = data[2]; } String osmHost = sharedpreferences.getString(MainActivity.SET_OSM_HOST, MainActivity.DEFAULT_OSM_HOST).toLowerCase(); - newUrl = "https://"+osmHost+"/#map="+zoom+"/"+data[0]+"/"+data[1]; + newUrl = "https://" + osmHost + "/#map=" + zoom + "/" + data[0] + "/" + data[1]; } } } - }else if(Arrays.asList(youtube_domains).contains(host)){ //Youtube URL + } else if (Arrays.asList(youtube_domains).contains(host)) { //Youtube URL boolean invidious_enabled = sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true); - if( invidious_enabled) { + if (invidious_enabled) { Matcher matcher = youtubePattern.matcher(url); while (matcher.find()) { final String youtubeId = matcher.group(3); @@ -486,8 +490,7 @@ public class TransformActivity extends Activity { } } } - } - else if(Arrays.asList(shortener_domains).contains(host)) { + } else if (Arrays.asList(shortener_domains).contains(host)) { String finalUrl = url; String finalExtraText = extraText; Thread thread = new Thread() { @@ -499,7 +502,7 @@ public class TransformActivity extends Activity { URL url_; String host = null; try { - url_ = new URL(notShortnedURLDialog.get(notShortnedURLDialog.size()-1)); + url_ = new URL(notShortnedURLDialog.get(notShortnedURLDialog.size() - 1)); host = url_.getHost(); } catch (MalformedURLException e) { e.printStackTrace(); @@ -508,9 +511,9 @@ public class TransformActivity extends Activity { boolean nitter_enabled = sharedpreferences.getBoolean(SET_NITTER_ENABLED, true); boolean invidious_enabled = sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true); boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true); - if(nitter_enabled && Arrays.asList(twitter_domains).contains(host)) { - Matcher matcher = nitterPattern.matcher(notShortnedURLDialog.get(notShortnedURLDialog.size()-1)); - String newUrlFinal = notShortnedURLDialog.get(notShortnedURLDialog.size()-1); + if (nitter_enabled && Arrays.asList(twitter_domains).contains(host)) { + Matcher matcher = nitterPattern.matcher(notShortnedURLDialog.get(notShortnedURLDialog.size() - 1)); + String newUrlFinal = notShortnedURLDialog.get(notShortnedURLDialog.size() - 1); while (matcher.find()) { final String nitter_directory = matcher.group(2); String nitterHost = sharedpreferences.getString(MainActivity.SET_NITTER_HOST, MainActivity.DEFAULT_NITTER_HOST).toLowerCase(); @@ -522,9 +525,9 @@ public class TransformActivity extends Activity { sendIntent.putExtra(Intent.EXTRA_TEXT, newExtraText); sendIntent.setType("text/plain"); startActivity(sendIntent); - }else if( invidious_enabled && Arrays.asList(youtube_domains).contains(host)) { - Matcher matcher = youtubePattern.matcher(notShortnedURLDialog.get(notShortnedURLDialog.size()-1)); - String newUrlFinal = notShortnedURLDialog.get(notShortnedURLDialog.size()-1); + } else if (invidious_enabled && Arrays.asList(youtube_domains).contains(host)) { + Matcher matcher = youtubePattern.matcher(notShortnedURLDialog.get(notShortnedURLDialog.size() - 1)); + String newUrlFinal = notShortnedURLDialog.get(notShortnedURLDialog.size() - 1); while (matcher.find()) { final String youtubeId = matcher.group(3); String invidiousHost = sharedpreferences.getString(MainActivity.SET_INVIDIOUS_HOST, MainActivity.DEFAULT_INVIDIOUS_HOST).toLowerCase(); @@ -540,23 +543,23 @@ public class TransformActivity extends Activity { sendIntent.putExtra(Intent.EXTRA_TEXT, newExtraText); sendIntent.setType("text/plain"); startActivity(sendIntent); - }else if( osm_enabled && notShortnedURLDialog.get(notShortnedURLDialog.size()-1).contains("/maps/place/")) { - String newUrlFinal = notShortnedURLDialog.get(notShortnedURLDialog.size()-1); - Matcher matcher = maps.matcher(notShortnedURLDialog.get(notShortnedURLDialog.size()-1)); + } else if (osm_enabled && notShortnedURLDialog.get(notShortnedURLDialog.size() - 1).contains("/maps/place/")) { + String newUrlFinal = notShortnedURLDialog.get(notShortnedURLDialog.size() - 1); + Matcher matcher = maps.matcher(notShortnedURLDialog.get(notShortnedURLDialog.size() - 1)); while (matcher.find()) { final String localization = matcher.group(1); assert localization != null; String[] data = localization.split(","); - if( data.length > 2 ){ + if (data.length > 2) { String zoom; String[] details = data[2].split("\\."); - if( details.length > 0 ) { + if (details.length > 0) { zoom = details[0]; - }else { + } else { zoom = data[2]; } String osmHost = sharedpreferences.getString(MainActivity.SET_OSM_HOST, MainActivity.DEFAULT_OSM_HOST).toLowerCase(); - newUrlFinal = "https://"+osmHost+"/#map="+zoom+"/"+data[0]+"/"+data[1]; + newUrlFinal = "https://" + osmHost + "/#map=" + zoom + "/" + data[0] + "/" + data[1]; } } String newExtraText = finalExtraText.replaceAll(Pattern.quote(finalUrl), Matcher.quoteReplacement(newUrlFinal)); @@ -565,8 +568,8 @@ public class TransformActivity extends Activity { sendIntent.putExtra(Intent.EXTRA_TEXT, newExtraText); sendIntent.setType("text/plain"); startActivity(sendIntent); - }else{ - String newExtraText = finalExtraText.replaceAll(Pattern.quote(finalUrl), Matcher.quoteReplacement(notShortnedURLDialog.get(notShortnedURLDialog.size()-1))); + } else { + String newExtraText = finalExtraText.replaceAll(Pattern.quote(finalUrl), Matcher.quoteReplacement(notShortnedURLDialog.get(notShortnedURLDialog.size() - 1))); Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, newExtraText); @@ -578,7 +581,7 @@ public class TransformActivity extends Activity { thread.start(); return; } - if( newUrl != null) { + if (newUrl != null) { extraText = extraText.replaceAll(Pattern.quote(url), Matcher.quoteReplacement(newUrl)); } Intent sendIntent = new Intent(); diff --git a/app/src/main/java/app/fedilab/nitterizeme/Utils.java b/app/src/main/java/app/fedilab/nitterizeme/Utils.java index ff2d31c..ab0e6ca 100644 --- a/app/src/main/java/app/fedilab/nitterizeme/Utils.java +++ b/app/src/main/java/app/fedilab/nitterizeme/Utils.java @@ -36,16 +36,17 @@ class Utils { /** * Returns the unshortened URL - * @param urls ArrayList URL to check + * + * @param urls ArrayList URL to check */ - static void checkUrl(ArrayList urls){ + static void checkUrl(ArrayList urls) { URL url; String newURL = null; String comingURl; try { - comingURl = urls.get(urls.size()-1); + comingURl = urls.get(urls.size() - 1); - if( comingURl.startsWith("http://")){ + if (comingURl.startsWith("http://")) { comingURl = comingURl.replace("http://", "https://"); } url = new URL(comingURl); @@ -53,7 +54,7 @@ class Utils { httpsURLConnection.setRequestProperty("http.keepAlive", "false"); httpsURLConnection.setInstanceFollowRedirects(false); httpsURLConnection.setRequestMethod("HEAD"); - if( httpsURLConnection.getResponseCode() == 301) { + if (httpsURLConnection.getResponseCode() == 301) { Map> map = httpsURLConnection.getHeaderFields(); for (Map.Entry> entry : map.entrySet()) { if (entry.toString().toLowerCase().startsWith("location")) { @@ -66,12 +67,12 @@ class Utils { } } httpsURLConnection.getInputStream().close(); - if (newURL != null && newURL.compareTo(comingURl)!=0){ + if (newURL != null && newURL.compareTo(comingURl) != 0) { URL redirectURL = new URL(newURL); String host = redirectURL.getHost(); String protocol = redirectURL.getProtocol(); - if( protocol != null && host != null){ - if( Arrays.asList(shortener_domains).contains(host)) { + if (protocol != null && host != null) { + if (Arrays.asList(shortener_domains).contains(host)) { checkUrl(urls); } } diff --git a/app/src/main/res/drawable/ic_android.xml b/app/src/main/res/drawable/ic_android.xml index 6de853c..bb6ea92 100644 --- a/app/src/main/res/drawable/ic_android.xml +++ b/app/src/main/res/drawable/ic_android.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml index 55aafa3..b80780a 100644 --- a/app/src/main/res/drawable/ic_check.xml +++ b/app/src/main/res/drawable/ic_check.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml index ac09fe3..f9eb7d2 100644 --- a/app/src/main/res/drawable/ic_error.xml +++ b/app/src/main/res/drawable/ic_error.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_expand_less.xml b/app/src/main/res/drawable/ic_expand_less.xml index 5042d80..4ff5565 100644 --- a/app/src/main/res/drawable/ic_expand_less.xml +++ b/app/src/main/res/drawable/ic_expand_less.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_expand_more.xml b/app/src/main/res/drawable/ic_expand_more.xml index bc72bdc..b6a4700 100644 --- a/app/src/main/res/drawable/ic_expand_more.xml +++ b/app/src/main/res/drawable/ic_expand_more.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_info_outline.xml b/app/src/main/res/drawable/ic_info_outline.xml index af0d4d0..2465f78 100644 --- a/app/src/main/res/drawable/ic_info_outline.xml +++ b/app/src/main/res/drawable/ic_info_outline.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 5f44b82..b312bd6 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -3,55 +3,56 @@ android:height="108dp" android:viewportWidth="461.9709" android:viewportHeight="461.9709"> - - - - - - - - - - + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_save.xml b/app/src/main/res/drawable/ic_save.xml index 74ca299..b32b114 100644 --- a/app/src/main/res/drawable/ic_save.xml +++ b/app/src/main/res/drawable/ic_save.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml index 1397d37..bc30c52 100644 --- a/app/src/main/res/drawable/ic_settings.xml +++ b/app/src/main/res/drawable/ic_settings.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_warning.xml b/app/src/main/res/drawable/ic_warning.xml index 1e606cc..8325ff6 100644 --- a/app/src/main/res/drawable/ic_warning.xml +++ b/app/src/main/res/drawable/ic_warning.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 01e4736..875b5fc 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -1,5 +1,4 @@ - - + - - - - + + + + + + android:textStyle="bold" /> + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp"> + android:padding="5dp"> + + + + + + - + + - + + @@ -138,38 +146,39 @@ + android:text="@string/Donate" /> + -