diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f3b4b077..f98a6a24 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -161,7 +161,10 @@
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation" />
+ android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation" />
+
diff --git a/app/src/main/java/org/mian/gitnex/activities/WikiActivity.java b/app/src/main/java/org/mian/gitnex/activities/WikiActivity.java
new file mode 100644
index 00000000..cfc4a3be
--- /dev/null
+++ b/app/src/main/java/org/mian/gitnex/activities/WikiActivity.java
@@ -0,0 +1,169 @@
+package org.mian.gitnex.activities;
+
+import android.os.Bundle;
+import android.text.method.ScrollingMovementMethod;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import androidx.annotation.NonNull;
+import com.vdurmont.emoji.EmojiParser;
+import org.gitnex.tea4j.v2.models.WikiPage;
+import org.mian.gitnex.R;
+import org.mian.gitnex.clients.RetrofitClient;
+import org.mian.gitnex.databinding.ActivityWikiBinding;
+import org.mian.gitnex.helpers.AlertDialogs;
+import org.mian.gitnex.helpers.AppUtil;
+import org.mian.gitnex.helpers.Markdown;
+import org.mian.gitnex.helpers.Toasty;
+import org.mian.gitnex.helpers.contexts.RepositoryContext;
+import retrofit2.Call;
+import retrofit2.Callback;
+
+/**
+ * @author M M Arif
+ */
+
+public class WikiActivity extends BaseActivity {
+
+ private ActivityWikiBinding binding;
+ private String pageName;
+ private RepositoryContext repository;
+ private boolean renderMd = true;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+
+ super.onCreate(savedInstanceState);
+
+ binding = ActivityWikiBinding.inflate(getLayoutInflater());
+ repository = RepositoryContext.fromIntent(getIntent());
+
+ setContentView(binding.getRoot());
+ setSupportActionBar(binding.toolbar);
+
+ pageName = getIntent().getStringExtra("pageName");
+ binding.close.setOnClickListener(view -> finish());
+
+ binding.toolbarTitle.setMovementMethod(new ScrollingMovementMethod());
+ binding.toolbarTitle.setText(pageName);
+
+ getWikiPageContents();
+ }
+
+ private void getWikiPageContents() {
+
+ Call call = RetrofitClient
+ .getApiInterface(ctx)
+ .repoGetWikiPage(repository.getOwner(), repository.getName(), pageName);
+
+ call.enqueue(new Callback<>() {
+
+ @Override
+ public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) {
+
+ if(response.isSuccessful()) {
+ if(response.code() == 200) {
+
+ WikiPage wikiPage = response.body();
+
+ runOnUiThread(() -> {
+
+ assert wikiPage != null;
+ String pageContents = AppUtil.decodeBase64(wikiPage.getContentBase64());
+ binding.contents.setContent(pageContents, "md");
+
+ if(renderMd) {
+ Markdown.render(ctx, EmojiParser.parseToUnicode(pageContents), binding.markdown, repository);
+
+ binding.markdownFrame.setVisibility(View.VISIBLE);
+ binding.contents.setVisibility(View.GONE);
+ }
+ else {
+ binding.markdownFrame.setVisibility(View.GONE);
+ binding.contents.setVisibility(View.VISIBLE);
+ }
+ });
+ }
+ else {
+
+ switch(response.code()) {
+
+ case 401:
+ runOnUiThread(() -> AlertDialogs.authorizationTokenRevokedDialog(ctx));
+ break;
+ case 403:
+ runOnUiThread(() -> Toasty.error(ctx, ctx.getString(R.string.authorizeError)));
+ break;
+ case 404:
+ runOnUiThread(() -> Toasty.warning(ctx, ctx.getString(R.string.apiNotFound)));
+ break;
+ default:
+ runOnUiThread(() -> Toasty.error(ctx, getString(R.string.genericError)));
+ }
+ }
+
+ binding.progressBar.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void onFailure(@NonNull Call call, @NonNull Throwable t) {
+
+ Toasty.error(ctx, ctx.getString(R.string.genericServerResponseError));
+ }
+ });
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.edit_menu, menu);
+ inflater.inflate(R.menu.files_view_menu, menu);
+
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ int id = item.getItemId();
+
+ if(id == android.R.id.home) {
+
+ finish();
+ return true;
+ }
+ else if(id == R.id.edit) {
+
+ return true;
+ }
+ else if(id == R.id.markdown) {
+
+ if(!renderMd) {
+
+ if(binding.markdown.getAdapter() == null) {
+ Markdown.render(ctx, EmojiParser.parseToUnicode(binding.contents.getContent()), binding.markdown, repository);
+ }
+
+ binding.contents.setVisibility(View.GONE);
+ binding.markdownFrame.setVisibility(View.VISIBLE);
+
+ renderMd = true;
+ }
+ else {
+ binding.markdownFrame.setVisibility(View.GONE);
+ binding.contents.setVisibility(View.VISIBLE);
+
+ renderMd = false;
+ }
+
+ return true;
+ }
+ else {
+ return super.onOptionsItemSelected(item);
+ }
+ }
+}
diff --git a/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java
index aaa84b93..1963214c 100644
--- a/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java
+++ b/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java
@@ -2,6 +2,7 @@ package org.mian.gitnex.adapters;
import android.annotation.SuppressLint;
import android.content.Context;
+import android.content.Intent;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
@@ -15,8 +16,11 @@ import com.amulyakhare.textdrawable.TextDrawable;
import com.amulyakhare.textdrawable.util.ColorGenerator;
import org.gitnex.tea4j.v2.models.WikiPageMetaData;
import org.mian.gitnex.R;
+import org.mian.gitnex.activities.RepoDetailActivity;
+import org.mian.gitnex.activities.WikiActivity;
import org.mian.gitnex.helpers.ClickListener;
import org.mian.gitnex.helpers.TimeHelper;
+import org.mian.gitnex.helpers.contexts.RepositoryContext;
import java.util.List;
/**
@@ -78,6 +82,10 @@ public class WikiListAdapter extends RecyclerView.Adapter {
+ Intent intent = new Intent(ctx, WikiActivity.class);
+ intent.putExtra("pageName", wikiPageMeta.getTitle());
+ intent.putExtra(RepositoryContext.INTENT_EXTRA, ((RepoDetailActivity) itemView.getContext()).repository);
+ ctx.startActivity(intent);
});
}
diff --git a/app/src/main/res/layout/activity_wiki.xml b/app/src/main/res/layout/activity_wiki.xml
new file mode 100644
index 00000000..d3995d21
--- /dev/null
+++ b/app/src/main/res/layout/activity_wiki.xml
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/menu/edit_menu.xml b/app/src/main/res/menu/edit_menu.xml
new file mode 100644
index 00000000..e18f811a
--- /dev/null
+++ b/app/src/main/res/menu/edit_menu.xml
@@ -0,0 +1,13 @@
+
+