From b90b3c332092568a0f87001870abcaa54320bd64 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Wed, 2 Oct 2019 21:32:59 +0500 Subject: [PATCH] Added reading file contentts --- app/src/main/AndroidManifest.xml | 9 +- .../gitnex/activities/FileViewActivity.java | 147 ++++++++++++++++++ .../mian/gitnex/adapters/FilesAdapter.java | 17 +- .../mian/gitnex/interfaces/ApiInterface.java | 5 +- .../main/res/drawable/ic_question_mark_24.xml | 5 + .../main/res/layout/activity_file_view.xml | 78 ++++++++++ app/src/main/res/layout/files_list.xml | 6 + 7 files changed, 261 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java create mode 100644 app/src/main/res/drawable/ic_question_mark_24.xml create mode 100644 app/src/main/res/layout/activity_file_view.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 036e310e..d90c021d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,8 +11,11 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> + @@ -64,8 +67,8 @@ - - + + \ No newline at end of file diff --git a/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java b/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java new file mode 100644 index 00000000..5c4065d1 --- /dev/null +++ b/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java @@ -0,0 +1,147 @@ +package org.mian.gitnex.activities; + +import android.content.Context; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import org.mian.gitnex.R; +import org.mian.gitnex.clients.RetrofitClient; +import org.mian.gitnex.helpers.AlertDialogs; +import org.mian.gitnex.helpers.Toasty; +import org.mian.gitnex.models.Files; +import org.mian.gitnex.util.AppUtil; +import org.mian.gitnex.util.TinyDB; +import retrofit2.Call; +import retrofit2.Callback; + +/** + * Author M M Arif + */ + +public class FileViewActivity extends AppCompatActivity { + + private View.OnClickListener onClickListener; + private TextView singleFileContents; + final Context ctx = this; + private ProgressBar mProgressBar; + + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_file_view); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + final TinyDB tinyDb = new TinyDB(getApplicationContext()); + String repoFullName = tinyDb.getString("repoFullName"); + String[] parts = repoFullName.split("/"); + final String repoOwner = parts[0]; + final String repoName = parts[1]; + final String instanceUrl = tinyDb.getString("instanceUrl"); + final String loginUid = tinyDb.getString("loginUid"); + final String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); + + boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); + + ImageView closeActivity = findViewById(R.id.close); + singleFileContents = findViewById(R.id.singleFileContents); + singleFileContents.setVisibility(View.GONE); + mProgressBar = findViewById(R.id.progress_bar); + + String singleFileName = getIntent().getStringExtra("singleFileName"); + + TextView toolbar_title = findViewById(R.id.toolbar_title); + toolbar_title.setText(singleFileName); + + initCloseListener(); + closeActivity.setOnClickListener(onClickListener); + + if(connToInternet) { + getSingleFileContents(instanceUrl, instanceToken, repoOwner, repoName, singleFileName); + } + else { + Toasty.info(getApplicationContext(), getString(R.string.checkNetConnection)); + } + + } + + private void getSingleFileContents(String instanceUrl, String token, final String owner, String repo, final String filename) { + + Call call = RetrofitClient + .getInstance(instanceUrl) + .getApiInterface() + .getSingleFileContents(token, owner, repo, filename); + + call.enqueue(new Callback() { + + @Override + public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { + + if (response.code() == 200) { + + AppUtil appUtil = new AppUtil(); + assert response.body() != null; + + if(!response.body().getContent().equals("")) { + singleFileContents.setVisibility(View.VISIBLE); + mProgressBar.setVisibility(View.GONE); + singleFileContents.setText(appUtil.decodeBase64(response.body().getContent())); + } + else { + singleFileContents.setText(""); + mProgressBar.setVisibility(View.GONE); + } + + } + else if(response.code() == 401) { + + AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle), + getResources().getString(R.string.alertDialogTokenRevokedMessage), + getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), + getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton)); + + } + else if(response.code() == 403) { + + Toasty.info(ctx, ctx.getString(R.string.authorizeError)); + + } + else if(response.code() == 404) { + + Toasty.info(ctx, ctx.getString(R.string.apiNotFound)); + + } + else { + + Toasty.info(getApplicationContext(), getString(R.string.labelGeneralError)); + + } + + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + Log.e("onFailure", t.toString()); + } + }); + + } + + private void initCloseListener() { + onClickListener = new View.OnClickListener() { + @Override + public void onClick(View view) { + getIntent().removeExtra("singleFileName"); + finish(); + } + }; + } + +} diff --git a/app/src/main/java/org/mian/gitnex/adapters/FilesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/FilesAdapter.java index 1755ffb9..7452842f 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/FilesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/FilesAdapter.java @@ -1,6 +1,8 @@ package org.mian.gitnex.adapters; import android.content.Context; +import android.content.Intent; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -11,6 +13,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import org.mian.gitnex.R; +import org.mian.gitnex.activities.FileViewActivity; import org.mian.gitnex.models.Files; import java.util.ArrayList; import java.util.List; @@ -29,26 +32,32 @@ public class FilesAdapter extends RecyclerView.Adapter createNewFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String fileName, @Body NewFile jsonStr); - @GET("repos/{owner}/{repo}/contents") // get all files and dirs + @GET("repos/{owner}/{repo}/contents") // get all the files and dirs of a repository Call> getFiles(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName); + + @GET("repos/{owner}/{repo}/contents/{file}") // get single file contents + Call getSingleFileContents(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String file); } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_question_mark_24.xml b/app/src/main/res/drawable/ic_question_mark_24.xml new file mode 100644 index 00000000..5ec2577a --- /dev/null +++ b/app/src/main/res/drawable/ic_question_mark_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_file_view.xml b/app/src/main/res/layout/activity_file_view.xml new file mode 100644 index 00000000..a22d64c8 --- /dev/null +++ b/app/src/main/res/layout/activity_file_view.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/files_list.xml b/app/src/main/res/layout/files_list.xml index bebd9514..1e0b113c 100644 --- a/app/src/main/res/layout/files_list.xml +++ b/app/src/main/res/layout/files_list.xml @@ -14,6 +14,12 @@ android:background="@color/backgroundColor" tools:context=".activities.MainActivity"> + +