Add edit feed activity
This commit is contained in:
parent
4ce966febe
commit
18e626a303
@ -16,10 +16,9 @@
|
||||
android:theme="@style/AppTheme"
|
||||
android:usesCleartextTraffic="true"
|
||||
tools:ignore="GoogleAppIndexingWarning">
|
||||
<activity android:name=".activities.ManageFeedsActivity"
|
||||
android:parentActivityName=".activities.MainActivity">
|
||||
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activities.ManageFeedsActivity"
|
||||
android:parentActivityName=".activities.MainActivity"></activity>
|
||||
<activity
|
||||
android:name=".activities.MainActivity"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
@ -33,6 +32,10 @@
|
||||
android:name=".activities.ItemActivity"
|
||||
android:parentActivityName=".activities.MainActivity"
|
||||
android:theme="@style/AppTheme.NoActionBar"></activity>
|
||||
<activity android:name=".activities.AddFeedActivity"
|
||||
android:parentActivityName=".activities.MainActivity">
|
||||
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
@ -0,0 +1,170 @@
|
||||
package com.readrops.app.activities;
|
||||
|
||||
import android.support.design.widget.TextInputEditText;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.DividerItemDecoration;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.Patterns;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
import com.mikepenz.fastadapter.FastAdapter;
|
||||
import com.mikepenz.fastadapter.IAdapter;
|
||||
import com.mikepenz.fastadapter.adapters.ItemAdapter;
|
||||
import com.mikepenz.fastadapter.listeners.OnClickListener;
|
||||
import com.readrops.app.R;
|
||||
import com.readrops.app.utils.HtmlParser;
|
||||
import com.readrops.app.utils.Utils;
|
||||
import com.readrops.app.utils.ParsingResult;
|
||||
import com.readrops.readropslibrary.localfeed.RSSNetwork;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import io.reactivex.Single;
|
||||
import io.reactivex.SingleObserver;
|
||||
import io.reactivex.SingleOnSubscribe;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
public class AddFeedActivity extends AppCompatActivity implements View.OnClickListener {
|
||||
|
||||
private TextInputEditText feedInput;
|
||||
private Button load;
|
||||
private ProgressBar progressBar;
|
||||
private Button validate;
|
||||
private RecyclerView recyclerView;
|
||||
|
||||
private ItemAdapter<ParsingResult> itemAdapter;
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_add_feed);
|
||||
|
||||
feedInput = findViewById(R.id.add_feed_text_input);
|
||||
load = findViewById(R.id.add_feed_load);
|
||||
validate = findViewById(R.id.add_feed_ok);
|
||||
progressBar = findViewById(R.id.fadd_feed_loading);
|
||||
recyclerView = findViewById(R.id.add_feed_results);
|
||||
|
||||
load.setOnClickListener(this);
|
||||
validate.setOnClickListener(this);
|
||||
|
||||
itemAdapter = new ItemAdapter<>();
|
||||
FastAdapter<ParsingResult> fastAdapter = FastAdapter.with(itemAdapter);
|
||||
fastAdapter.withSelectable(true);
|
||||
fastAdapter.withOnClickListener((v, adapter, item, position) -> {
|
||||
return true;
|
||||
});
|
||||
|
||||
recyclerView.setAdapter(fastAdapter);
|
||||
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
|
||||
recyclerView.setLayoutManager(layoutManager);
|
||||
DividerItemDecoration decoration = new DividerItemDecoration(this, ((LinearLayoutManager) layoutManager).getOrientation());
|
||||
recyclerView.addItemDecoration(decoration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.add_feed_load:
|
||||
if (isValidUrl()) {
|
||||
progressBar.setVisibility(View.VISIBLE);
|
||||
loadFeed();
|
||||
}
|
||||
break;
|
||||
case R.id.add_feed_ok:
|
||||
exit();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isValidUrl() {
|
||||
String url = feedInput.getText().toString().trim();
|
||||
|
||||
if (url.isEmpty()) {
|
||||
feedInput.setError(getString(R.string.add_feed_empty_field));
|
||||
return false;
|
||||
} else if (!Patterns.WEB_URL.matcher(url).matches()) {
|
||||
feedInput.setError(getString(R.string.add_feed_wrong_url));
|
||||
return false;
|
||||
} else
|
||||
return true;
|
||||
}
|
||||
|
||||
private void exit() {
|
||||
|
||||
}
|
||||
|
||||
private void loadFeed() {
|
||||
String url = feedInput.getText().toString().trim();
|
||||
|
||||
final String finalUrl;
|
||||
if (!(url.contains(Utils.HTTP_PREFIX) || url.contains(Utils.HTTPS_PREFIX)))
|
||||
finalUrl = Utils.HTTPS_PREFIX + url;
|
||||
else
|
||||
finalUrl = url;
|
||||
|
||||
Single.create((SingleOnSubscribe<List<ParsingResult>>) emitter -> {
|
||||
RSSNetwork rssApi = new RSSNetwork();
|
||||
List<ParsingResult> results = new ArrayList<>();
|
||||
|
||||
if (rssApi.isUrlFeedLink(finalUrl)) {
|
||||
ParsingResult parsingResult = new ParsingResult(finalUrl, null);
|
||||
results.add(parsingResult);
|
||||
|
||||
} else
|
||||
results.addAll(HtmlParser.getFeedLink(finalUrl));
|
||||
|
||||
emitter.onSuccess(results);
|
||||
}).subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new SingleObserver<List<ParsingResult>>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<ParsingResult> parsingResultList) {
|
||||
displayResults(parsingResultList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void displayResults(List<ParsingResult> parsingResultList) {
|
||||
recyclerView.setVisibility(View.VISIBLE);
|
||||
progressBar.setVisibility(View.GONE);
|
||||
|
||||
itemAdapter.add(parsingResultList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
finish();
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
@ -34,7 +34,7 @@ import com.readrops.app.views.SimpleCallback;
|
||||
import com.readrops.app.database.pojo.ItemWithFeed;
|
||||
import com.readrops.app.database.entities.Item;
|
||||
import com.readrops.app.utils.GlideApp;
|
||||
import com.readrops.readropslibrary.ParsingResult;
|
||||
import com.readrops.app.utils.ParsingResult;
|
||||
|
||||
|
||||
import org.joda.time.LocalDateTime;
|
||||
@ -239,8 +239,10 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
|
||||
|
||||
public void displayAddFeedDialog(View view) {
|
||||
actionMenu.close(true);
|
||||
Dialog dialog = new AddFeedDialog(this, R.layout.add_feed_layout);
|
||||
dialog.show();
|
||||
//Dialog dialog = new AddFeedDialog(this, R.layout.add_feed_layout);
|
||||
//dialog.show();
|
||||
Intent intent = new Intent(this, AddFeedActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
public void addFolder(View view) {
|
||||
|
@ -9,7 +9,7 @@ import com.readrops.app.views.SimpleCallback;
|
||||
import com.readrops.app.database.Database;
|
||||
import com.readrops.app.database.entities.Feed;
|
||||
import com.readrops.app.database.entities.Folder;
|
||||
import com.readrops.readropslibrary.ParsingResult;
|
||||
import com.readrops.app.utils.ParsingResult;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.readrops.app.repositories;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Application;
|
||||
import android.arch.lifecycle.LiveData;
|
||||
import android.graphics.Bitmap;
|
||||
@ -14,7 +13,7 @@ import com.readrops.app.database.entities.Feed;
|
||||
import com.readrops.app.database.entities.Item;
|
||||
import com.readrops.app.utils.Utils;
|
||||
import com.readrops.app.utils.HtmlParser;
|
||||
import com.readrops.readropslibrary.ParsingResult;
|
||||
import com.readrops.app.utils.ParsingResult;
|
||||
import com.readrops.readropslibrary.QueryCallback;
|
||||
import com.readrops.readropslibrary.Utils.LibUtils;
|
||||
import com.readrops.readropslibrary.localfeed.AFeed;
|
||||
|
@ -2,7 +2,6 @@ package com.readrops.app.utils;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.readrops.readropslibrary.ParsingResult;
|
||||
import com.readrops.readropslibrary.Utils.LibUtils;
|
||||
|
||||
import org.jsoup.Connection;
|
||||
|
89
app/src/main/java/com/readrops/app/utils/ParsingResult.java
Normal file
89
app/src/main/java/com/readrops/app/utils/ParsingResult.java
Normal file
@ -0,0 +1,89 @@
|
||||
package com.readrops.app.utils;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.mikepenz.fastadapter.FastAdapter;
|
||||
import com.mikepenz.fastadapter.items.AbstractItem;
|
||||
import com.readrops.app.R;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ParsingResult extends AbstractItem<ParsingResult, ParsingResult.ParsingResultViewHolder> {
|
||||
|
||||
private String url;
|
||||
|
||||
private String label;
|
||||
|
||||
public ParsingResult(String url, String label) {
|
||||
this.url = url;
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
||||
public void setLabel(String label) {
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSelectable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ParsingResultViewHolder getViewHolder(View v) {
|
||||
return new ParsingResultViewHolder(v);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getType() {
|
||||
return R.id.add_feed_main_layout;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLayoutRes() {
|
||||
return R.layout.add_feed_item;
|
||||
}
|
||||
|
||||
class ParsingResultViewHolder extends FastAdapter.ViewHolder<ParsingResult> {
|
||||
|
||||
private TextView feedLabel;
|
||||
private TextView feedUrl;
|
||||
|
||||
public ParsingResultViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
||||
feedLabel = itemView.findViewById(R.id.add_feed_item_label);
|
||||
feedUrl = itemView.findViewById(R.id.add_feed_item_url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindView(ParsingResult item, List<Object> payloads) {
|
||||
feedLabel.setText(item.getLabel());
|
||||
feedUrl.setText(item.getUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unbindView(ParsingResult item) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -8,7 +8,7 @@ import android.support.annotation.NonNull;
|
||||
import com.readrops.app.database.pojo.ItemWithFeed;
|
||||
import com.readrops.app.repositories.LocalFeedRepository;
|
||||
import com.readrops.app.views.SimpleCallback;
|
||||
import com.readrops.readropslibrary.ParsingResult;
|
||||
import com.readrops.app.utils.ParsingResult;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -22,7 +22,7 @@ import com.readrops.app.R;
|
||||
import com.readrops.app.activities.MainActivity;
|
||||
import com.readrops.app.utils.Utils;
|
||||
import com.readrops.app.utils.HtmlParser;
|
||||
import com.readrops.readropslibrary.ParsingResult;
|
||||
import com.readrops.app.utils.ParsingResult;
|
||||
import com.readrops.readropslibrary.localfeed.RSSNetwork;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
@ -54,7 +54,7 @@ public class AddFeedDialog extends Dialog implements View.OnClickListener {
|
||||
|
||||
button = findViewById(R.id.add_feed_validate);
|
||||
button.setOnClickListener(this);
|
||||
textInputEditText = findViewById(R.id.add_feed_edit_text);
|
||||
textInputEditText = findViewById(R.id.add_feed_text_input);
|
||||
progressBar = findViewById(R.id.add_feed_progressbar);
|
||||
errorTextView = findViewById(R.id.add_feed_error);
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.readrops.app.R;
|
||||
import com.readrops.readropslibrary.ParsingResult;
|
||||
import com.readrops.app.utils.ParsingResult;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
77
app/src/main/res/layout/activity_add_feed.xml
Normal file
77
app/src/main/res/layout/activity_add_feed.xml
Normal file
@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="20dp"
|
||||
tools:context=".activities.AddFeedActivity">
|
||||
|
||||
<android.support.constraint.ConstraintLayout
|
||||
android:id="@+id/add_feed_main_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/add_feed_input_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/add_feed_text_input"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/feed_url" />
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/add_feed_load"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/load"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/add_feed_input_layout" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/fadd_feed_loading"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/add_feed_load"
|
||||
tools:visibility="gone" />
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/add_feed_results"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/fadd_feed_loading"
|
||||
tools:visibility="gone" />
|
||||
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/add_feed_ok"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/validate"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/add_feed_main_layout"
|
||||
android:enabled="false"/>
|
||||
|
||||
|
||||
</android.support.constraint.ConstraintLayout>
|
@ -28,7 +28,7 @@
|
||||
app:layout_constraintTop_toBottomOf="@+id/add_feed_title">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/add_feed_edit_text"
|
||||
android:id="@+id/add_feed_text_input"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/feed_url" />
|
||||
|
@ -30,5 +30,6 @@
|
||||
<string name="no_folder">Pas de dossier</string>
|
||||
<string name="cancel">Retour</string>
|
||||
<string name="delete_feed">Supprimer le flux ?</string>
|
||||
<string name="load">Charger</string>
|
||||
|
||||
</resources>
|
@ -1,6 +1,6 @@
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">Readrops</string>
|
||||
|
||||
|
||||
<string name="to_read">To read</string>
|
||||
<string name="non_read_articles">Non read articles</string>
|
||||
<string name="open_nav_drawer">Open menu</string>
|
||||
@ -32,4 +32,5 @@
|
||||
<string name="no_folder">No folder</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="delete_feed">Delete feed ?</string>
|
||||
<string name="load">Load</string>
|
||||
</resources>
|
||||
|
@ -1,29 +0,0 @@
|
||||
package com.readrops.readropslibrary;
|
||||
|
||||
public class ParsingResult {
|
||||
|
||||
private String url;
|
||||
|
||||
private String label;
|
||||
|
||||
public ParsingResult(String url, String label) {
|
||||
this.url = url;
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
||||
public void setLabel(String label) {
|
||||
this.label = label;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user