Skip to content

Commit

Permalink
beta ver.
Browse files Browse the repository at this point in the history
  • Loading branch information
PangBaiWork committed Feb 11, 2024
1 parent 21c0e8a commit 5863b6f
Show file tree
Hide file tree
Showing 49 changed files with 1,400 additions and 692 deletions.
27 changes: 27 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
## 引言
博客是什么?它是我们的另一片天地,在这里你可以说你想说的话,分享自己学到的新东西,美好的事,是温馨的小窝。
它是不被世俗打扰的净土,没有人在这里教你做事,你可以倾心陈述一切。
它是可以记录你的生活,你的成长,如果你想,甚至是你的一生。
静态博客引擎允许使用者们以最低成本运行自己的博客,热爱生活的你,有没有想过在手机上编写发布自己的博客?
也许是一场形式上的会议,也许是置身于喧闹的人群,也许是很长很长的无聊旅途,把那些被毫无意义之事浪费的时间用在总结与分享之上。
你或许已经了解过一些不成熟的方案,但现在这里提供了更好的方案。
## 描述
**WeBlog**是一个运行在安卓的静态博客编写器,他提供从编写,构建到预览预览博客的能力,同时包含GIT,终端,自定义Shell脚本等功能。
新建文章,标签管理,现代化的UI,可以提供更好博客编写的体验。
### TODO
* [x] Editor and Highlight
* [x] File Manager(with post title parsing)
* [x] NPM and GIT support
* [x] Fixed node_modules in External storage
* [x] Create-Article panel
* [x] Tags and categories select
* [x] Hexo project support
* [ ] Hugo project support
* [ ] Preference support
* [ ] Environment information
## 鸣谢的开源项目
[sora-editor](https://github.com/Rosemoe/sora-editor)
[Termux](https://github.com/termux/termux-app)
[Busybox](https://busybox.net/)
...

15 changes: 11 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,19 @@
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
android:icon="@drawable/ic_app2"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">

<service
android:name=".project.MainService"
android:enabled="true"
android:exported="true"></service>

<activity
android:name=".activity.MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:exported="true"
android:label="WeBlog"
android:launchMode="singleTop"
android:resizeableActivity="true"
android:windowSoftInputMode="adjustResize|stateAlwaysHidden">
Expand All @@ -29,10 +34,12 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".activity.HomeActivity"
android:resizeableActivity="true"
<activity
android:label="WeBlog"
android:name=".activity.HomeActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize|stateAlwaysHidden"/>
android:resizeableActivity="true"
android:windowSoftInputMode="adjustResize|stateAlwaysHidden" />
</application>

</manifest>
1 change: 1 addition & 0 deletions app/src/main/assets/scripts/hexo/1.HexoClean.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
hexo clean
1 change: 1 addition & 0 deletions app/src/main/assets/scripts/hexo/2.HexoGenerate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
hexo g
1 change: 1 addition & 0 deletions app/src/main/assets/scripts/hexo/3.HexoDeploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
hexo d
19 changes: 14 additions & 5 deletions app/src/main/java/com/pangbai/terminal/view/SuperTerminalView.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import android.widget.ScrollView;


//import com.pangbai.dowork.service.mainService;
//import com.pangbai.dowork.service.MainService;
import androidx.viewpager.widget.ViewPager;

import com.pangbai.terminal.TerminalSession;
Expand All @@ -45,6 +45,7 @@ public final class SuperTerminalView extends TerminalView {
public int[] textSizes;



/*
public SuperTerminalView(TermActivity context) {
this(context, (AttributeSet) null);
Expand Down Expand Up @@ -74,6 +75,7 @@ public SuperTerminalView(TermActivity context) {
public SuperTerminalView(Context context, AttributeSet attributes) {
super(context, attributes);
setFocusable(true);

setFocusableInTouchMode(true);
mTerminalSessionClient = new TSC();
mTerminalViewClient = new TVC();
Expand Down Expand Up @@ -166,7 +168,16 @@ private ViewParent findViewParentIfNeeds(View tag) {
} else {
return parent;
}


}

@Override
protected void onDetachedFromWindow() {
mTerminalSession.finishIfRunning();
super.onDetachedFromWindow();
}

private class TSC implements TerminalSessionClient {
@Override
public void onColorsChanged(TerminalSession session) {
Expand Down Expand Up @@ -195,11 +206,9 @@ public void onTerminalCursorStateChange(boolean state) {

@Override
public void onSessionFinished(TerminalSession finishedSession,int DelayTime) {
Handler mHander = new Handler(Looper.getMainLooper());


/*mHander.postDelayed(() -> {
mTerminalSession = null;
mTerminalSessionClient = null;
mTerminalViewClient = null;
SuperTerminalView.this.setVisibility(GONE);
Expand Down
128 changes: 67 additions & 61 deletions app/src/main/java/com/pangbai/weblog/activity/HomeActivity.java
Original file line number Diff line number Diff line change
@@ -1,65 +1,54 @@
package com.pangbai.weblog.activity;

import static com.pangbai.weblog.project.ProjectManager.checkIsHexo;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.DocumentsContract;
import android.util.DisplayMetrics;
import android.os.Environment;
import android.provider.Settings;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.Toast;

import androidx.activity.OnBackPressedCallback;
import androidx.activity.OnBackPressedDispatcher;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.ColorUtils;
import androidx.core.provider.DocumentsContractCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.documentfile.provider.DocumentFile;

import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.internal.ViewUtils;
import com.google.android.material.snackbar.Snackbar;
import com.pangbai.weblog.R;
import com.pangbai.weblog.databinding.ActivityHomeBinding;
import com.pangbai.weblog.databinding.LayoutTerminalBinding;
import com.pangbai.weblog.execute.cmdExer;
import com.pangbai.weblog.global.ThemeUtil;
import com.pangbai.weblog.project.Project;
import com.pangbai.weblog.tool.DialogUtils;
import com.pangbai.weblog.tool.Init;
import com.pangbai.weblog.tool.ProjectManager;
import com.pangbai.weblog.tool.util;
import com.pangbai.weblog.project.ProjectManager;
import com.pangbai.weblog.tool.ThreadUtil;
import com.pangbai.weblog.view.FileListSelect;

import java.io.File;

import br.tiagohm.markdownview.Utils;

public class HomeActivity extends AppCompatActivity implements View.OnClickListener {
ActivityHomeBinding binding;
ActivityResultLauncher chooseFolder;
boolean isTerminalOpen = false;
Project selectProject;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityHomeBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
new Init(this);
// chooseFolder = registerForActivityResult(new ActivityResultContracts.OpenDocumentTree(), result -> openProject(result));
binding.github.setOnClickListener(this);
binding.openProject.setOnClickListener(this);
binding.createProject.setOnClickListener(this);
binding.pullProject.setOnClickListener(this);
binding.openTerminal.setOnClickListener(this);

}

@Override
Expand All @@ -74,68 +63,87 @@ public void onClick(View v) {

select(file -> {
AlertDialog inputdialog = DialogUtils.showInputDialog(this, getString(R.string.input_blog_title), userInput -> {
ProjectManager projectManager = new ProjectManager();
selectProject = new Project(userInput, file.getAbsolutePath(), ProjectManager.Type.hexo);
ProjectManager projectManager = new ProjectManager(selectProject);
AlertDialog dialog = DialogUtils.showLoadingDialog(this);
new Thread() {
@Override
public void run() {
boolean init = projectManager.createProject(file.getAbsolutePath(), userInput, ProjectManager.Type.hexo);
runOnUiThread(() -> {
dialog.dismiss();
if (init) {
openProject(file.getAbsolutePath());
} else {
Snackbar.make(binding.getRoot(), "Failed, please try terminal", Snackbar.LENGTH_LONG).show();
}
});
}
}.start();
ThreadUtil.thread(() -> {
boolean init = projectManager.createProject();
projectManager.createScript(HomeActivity.this);
runOnUiThread(() -> {
dialog.dismiss();
if (init) {
openProject(selectProject);
} else {
Snackbar.make(binding.getRoot(), "Failed, please try terminal", Snackbar.LENGTH_LONG).show();
}
});
});


});
});


} else if (id == R.id.pull_project) {
select(file -> {
if (file.list().length != 0) {
Snackbar.make(binding.getRoot(), "The folder should be empty", Snackbar.LENGTH_SHORT).show();
return;
}
DialogUtils.showInputDialog(this, getString(R.string.clone_git), userInput -> {
AlertDialog dialog = DialogUtils.showLoadingDialog(this);
new Thread() {
@Override
public void run() {
boolean clone = cmdExer.execute("git clone " + userInput + " " + file.getAbsolutePath(), false) == 0;
dialog.dismiss();
runOnUiThread(() -> {
if (clone) {
openProject(file.getAbsolutePath());
ThreadUtil.thread(() -> {
boolean clone = cmdExer.execute("git clone " + userInput + " " + file.getAbsolutePath(), false) == 0;
if (clone) {
if (!checkIsHexo(file)){
runOnUiThread(() -> Snackbar.make(binding.getRoot(),"Is not a hexo project",Snackbar.LENGTH_SHORT).show());
return;
}
selectProject = new Project(file.getName(), file.getAbsolutePath(), ProjectManager.Type.hexo);
new ProjectManager(selectProject).createScript(HomeActivity.this);
}
dialog.dismiss();
runOnUiThread(() -> {
if (clone) {
openProject(selectProject);
} else {
Snackbar.make(binding.getRoot(), "Clone failed", Snackbar.LENGTH_SHORT);
}
});
});

} else {
Snackbar.make(binding.getRoot(), "Clone failed", Snackbar.LENGTH_SHORT);

}
});
}
}.start();
});
});
} else if (id == R.id.open_project) {
select(file -> {
openProject(file.getAbsolutePath());
if (!checkIsHexo(file)){
Snackbar.make(binding.getRoot(),"Is not a hexo project",Snackbar.LENGTH_SHORT).show();
return;
}
selectProject=new Project(file.getName(), file.getAbsolutePath(), ProjectManager.Type.hexo);
new ProjectManager(selectProject).createScript(HomeActivity.this);
openProject(selectProject);
});
} else if (id== R.id.open_terminal) {
} else if (id == R.id.open_terminal) {
openTerminal();
} else if (id==R.id.setting) {
Snackbar.make(binding.getRoot(),"Todo..",Snackbar.LENGTH_SHORT).show();
} else if (id==R.id.donate) {
Snackbar.make(binding.getRoot(),"Todo..",Snackbar.LENGTH_SHORT).show();
}

}

void select(FileListSelect.FileChoose fileChoose) {
FileListSelect list = new FileListSelect(this, fileChoose, true, null);
FileListSelect list = new FileListSelect(this, true, fileChoose);
list.showChooseDialog();
}

// Snackbar.make(v,"loading...",Snackbar.LENGTH_SHORT).show();
void openProject(String path) {

void openProject(Project project) {
ProjectManager.saveCurrentProject(project);
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("project_path", path);
startActivity(intent);
finish();
}
Expand All @@ -149,19 +157,17 @@ void openTerminal() {
LayoutTerminalBinding cmdBinding = LayoutTerminalBinding.inflate(getLayoutInflater());

bottomSheet.addView(cmdBinding.getRoot());
// cmdBinding.terminalBg.setBackgroundColor(ColorUtils.setAlphaComponent(com.google.android.material.R.attr.colorPrimary, 200));
// cmdBinding.terminalBg.setBackgroundColor(ColorUtils.setAlphaComponent(com.google.android.material.R.attr.colorPrimary, 200));
cmdBinding.ExtraKey.addView(cmdBinding.terminal.createKeyView());
cmdBinding.terminal.setTerminal(Init.filesDirPath);

//ThemeUtil.applyEdgeToEdge(getWindow());

isTerminalOpen=true;
isTerminalOpen = true;
}


behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}



}
Loading

0 comments on commit 5863b6f

Please sign in to comment.