[File View] add highlight sourcecode (#187)

This commit is contained in:
6543 2019-11-05 08:34:22 +00:00 committed by M M Arif
parent 04073ac873
commit 463961800f
5 changed files with 60 additions and 12 deletions

View File

@ -68,4 +68,5 @@ dependencies {
implementation "com.github.HamidrezaAmz:BreadcrumbsView:0.2.9" implementation "com.github.HamidrezaAmz:BreadcrumbsView:0.2.9"
implementation "commons-io:commons-io:2.6" implementation "commons-io:commons-io:2.6"
implementation "com.github.chrisbanes:PhotoView:2.3.0" implementation "com.github.chrisbanes:PhotoView:2.3.0"
implementation "com.pddstudio:highlightjs-android:1.5.0"
} }

View File

@ -16,6 +16,8 @@ import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import com.github.chrisbanes.photoview.PhotoView; import com.github.chrisbanes.photoview.PhotoView;
import com.pddstudio.highlightjs.HighlightJsView;
import com.pddstudio.highlightjs.models.Theme;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.clients.RetrofitClient;
@ -35,6 +37,7 @@ public class FileViewActivity extends AppCompatActivity {
private View.OnClickListener onClickListener; private View.OnClickListener onClickListener;
private TextView singleFileContents; private TextView singleFileContents;
private HighlightJsView singleCodeContents;
private PhotoView imageView; private PhotoView imageView;
final Context ctx = this; final Context ctx = this;
private ProgressBar mProgressBar; private ProgressBar mProgressBar;
@ -61,6 +64,7 @@ public class FileViewActivity extends AppCompatActivity {
ImageView closeActivity = findViewById(R.id.close); ImageView closeActivity = findViewById(R.id.close);
singleFileContents = findViewById(R.id.singleFileContents); singleFileContents = findViewById(R.id.singleFileContents);
singleCodeContents = findViewById(R.id.singleCodeContents);
imageView = findViewById(R.id.imageView); imageView = findViewById(R.id.imageView);
singleFileContents.setVisibility(View.GONE); singleFileContents.setVisibility(View.GONE);
mProgressBar = findViewById(R.id.progress_bar); mProgressBar = findViewById(R.id.progress_bar);
@ -105,19 +109,34 @@ public class FileViewActivity extends AppCompatActivity {
String fileExtension = FilenameUtils.getExtension(filename); String fileExtension = FilenameUtils.getExtension(filename);
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
if(fileExtension.equals("png") || fileExtension.equals("jpg") || fileExtension.equals("jpeg") || fileExtension.equals("gif")) { if(appUtil.imageExtension(fileExtension)) { // file is image
singleFileContents.setVisibility(View.GONE); singleFileContents.setVisibility(View.GONE);
singleCodeContents.setVisibility(View.GONE);
imageView.setVisibility(View.VISIBLE); imageView.setVisibility(View.VISIBLE);
imageData = Base64.decode(response.body().getContent(), Base64.DEFAULT); imageData = Base64.decode(response.body().getContent(), Base64.DEFAULT);
Drawable imageDrawable = new BitmapDrawable(getResources(), BitmapFactory.decodeByteArray(imageData, 0, imageData.length)); Drawable imageDrawable = new BitmapDrawable(getResources(), BitmapFactory.decodeByteArray(imageData, 0, imageData.length));
imageView.setImageDrawable(imageDrawable); imageView.setImageDrawable(imageDrawable);
} }
else { else if (appUtil.sourceCodeExtension(fileExtension)) { // file is sourcecode
imageView.setVisibility(View.GONE); imageView.setVisibility(View.GONE);
singleFileContents.setVisibility(View.GONE);
singleCodeContents.setVisibility(View.VISIBLE);
singleCodeContents.setTheme(Theme.GRUVBOX_DARK);
singleCodeContents.setShowLineNumbers(true);
singleCodeContents.setSource(appUtil.decodeBase64(response.body().getContent()));
}
else { // file type not known - plain text view
imageView.setVisibility(View.GONE);
singleCodeContents.setVisibility(View.GONE);
singleFileContents.setVisibility(View.VISIBLE); singleFileContents.setVisibility(View.VISIBLE);
singleFileContents.setText(appUtil.decodeBase64(response.body().getContent())); singleFileContents.setText(appUtil.decodeBase64(response.body().getContent()));
} }

View File

@ -13,6 +13,7 @@ import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.Locale; import java.util.Locale;
@ -145,16 +146,16 @@ public class AppUtil {
String sMonth; String sMonth;
if (Integer.parseInt(month) < 10) { if (Integer.parseInt(month) < 10) {
sMonth = "0"+String.valueOf(month); sMonth = "0"+ month;
} else { } else {
sMonth = String.valueOf(month); sMonth = month;
} }
String sDay; String sDay;
if (Integer.parseInt(day) < 10) { if (Integer.parseInt(day) < 10) {
sDay = "0"+String.valueOf(day); sDay = "0"+ day;
} else { } else {
sDay = String.valueOf(day); sDay = day;
} }
return year + "-" + sMonth + "-" + sDay; return year + "-" + sMonth + "-" + sDay;
@ -170,14 +171,14 @@ public class AppUtil {
String sMin; String sMin;
if ((mMinute) < 10) { if ((mMinute) < 10) {
sMin = "0"+String.valueOf(mMinute); sMin = "0"+ mMinute;
} else { } else {
sMin = String.valueOf(mMinute); sMin = String.valueOf(mMinute);
} }
String sSec; String sSec;
if ((mSeconds) < 10) { if ((mSeconds) < 10) {
sSec = "0"+String.valueOf(mSeconds); sSec = "0"+ mSeconds;
} else { } else {
sSec = String.valueOf(mSeconds); sSec = String.valueOf(mSeconds);
} }
@ -210,4 +211,23 @@ public class AppUtil {
} }
public Boolean sourceCodeExtension(String ext) {
String[] extValues = new String[] {"md", "json", "java", "go", "php", "c", "cc", "cpp", "cxx", "cyc", "m",
"cs", "bash", "sh", "bsh", "cv", "python", "perl", "pm", "rb", "ruby", "javascript",
"coffee", "rc", "rs", "rust", "basic", "clj", "css", "dart", "lisp", "erl", "hs", "lsp", "rkt",
"ss", "llvm", "ll", "lua", "matlab", "pascal", "r", "scala", "sql", "latex", "tex", "vb", "vbs",
"vhd", "tcl", "wiki.meta", "yaml", "yml", "markdown", "xml", "proto", "regex", "py", "pl", "js"};
return Arrays.asList(extValues).contains(ext);
}
public Boolean imageExtension(String ext) {
String[] extValues = new String[] {"jpg", "jpeg", "gif", "png", "ico"};
return Arrays.asList(extValues).contains(ext);
}
} }

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout <RelativeLayout
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical" android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/colorPrimary"> android:background="@color/colorPrimary">
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
@ -49,7 +49,7 @@
android:layout_marginTop="50dp" android:layout_marginTop="50dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/black" android:background="@color/colorPrimary"
android:orientation="vertical"> android:orientation="vertical">
<ScrollView <ScrollView
@ -70,6 +70,14 @@
</LinearLayout> </LinearLayout>
<com.pddstudio.highlightjs.HighlightJsView
android:id="@+id/singleCodeContents"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:layout_marginTop="42dp"
android:visibility="gone" />
<com.github.chrisbanes.photoview.PhotoView <com.github.chrisbanes.photoview.PhotoView
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_centerInParent="true" android:layout_centerInParent="true"

View File

@ -7,7 +7,7 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.5.1' classpath 'com.android.tools.build:gradle:3.5.2'
} }
} }